Конференция ".Net" » Обращение к значению запроса [D2005, WinXP]
 
  • inspirion © (16.08.05 15:37) [0]
    Мастера поскажите каким образом можно получить значения запроса по аналогу из Delphi IBQuery.FieldByname('NameField').AsString;
  • k2 © (17.08.05 05:56) [1]
    Convert.To[NeedType]?

    заодно не спотыкаться о DBNull лучше по-моему написать небольшую оберточку на используемые у тебя типы, где заложить логику, как твое приложение будет понимать значения null. Примерно так(может профи из соседней ветки будут ругаться, только бы в терновый куст не бросали :о)):

    unit MyDbUtils;
    interface

    uses
     System.Data.SqlClient, System.Globalization;

    type
     TMyDbConvert = class
     public
       class function ToInt16(value: TObject): SmallInt;
       class function ToDateTime(value: TObject): DateTime;
       class function ToBoolean(value: TObject): Boolean;
     end;

    implementation

    class function TMyDbConvert.ToBoolean(value: TObject): Boolean;
    begin
     if Value <> dbNull.Value then
       Result := Convert.ToBoolean(value)
     else
       Result := False;
    end;

    class function TMyDbConvert.ToDateTime(value: TObject): DateTime;
    begin
     if Value <> dbNull.Value then
       Result := Convert.ToDateTime(value)
     else
       Result := Convert.ToDateTime('01.01.1901', CultureInfo.CurrentUICulture.DateTimeFormat);
    end;

    class function TMyDbConvert.ToInt16(value: TObject): SmallInt;
    begin
     if Value <> dbNull.Value then
       Result := Convert.ToInt16(value)
     else
       Result := 0;
    end;

    end.

    const
     c_cnstr = 'data source=local;initial catalog=northwind;user id=k2;password=k2;';
     c_sel_emp = 'select top 10 * from emp;';

    procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
    var
     conn: SqlConnection;
     cmd: SqlCommand;
     r: SqlDataReader;
     i: integer;
     n: decimal;
     s: string;
     dt: DateTime;
     b: Boolean;
    begin
     conn := SqlConnection.Create(c_cnstr);
     cmd := sqlCommand.Create(c_sel_emp, conn);
     conn.Open;
     r := cmd.ExecuteReader;
     while r.Read do begin
       i := TMyDbConvert.ToInt16(r['IntField']);
       s := r['StringField'].ToString;
       dt := TMyDbConvert.ToDateTime(r['DateTimeField']);
       //b := r.GetBoolean(r.GetOrdinal('BitField')); :)))
       b := TMyDbConvert.ToBoolean(r['BitField']);
       Response.Write('<p>'+i.ToString+' '+s+' '+dt.ToShortDateString+' '+b.ToString+'</p>');
     end;
     conn.Close;
    end;



    если уверен в типе и порядке полей в запросе то в можно например через reader.Get[NeedType](index_field)
  • имя (04.04.09 01:04) [2]
    Удалено модератором
  • имя (04.04.09 01:05) [3]
    Удалено модератором
 
Конференция ".Net" » Обращение к значению запроса [D2005, WinXP]
Есть новые Нет новых   [118456   +58][b:0][p:0.002]