2017-08-23 9 views
0

私は奇妙な問題を有する:C#odbcDatareader GET重複フィールド値

データベース:火の鳥 接続文字列: ドライバ= {火の鳥/ InterBaseの(R)ドライバを}; DBNAME = XXX; CHARSET = NONE。 UID = xxx; = XXX

PASSWORD I動作にODBCクラスのセットを使用(選択)データベーステーブル

場合OdbcDataReader.GetValue(とIループDBレコード)、いくつかのフィールド(char型)を持っている場合値がない場合(char_length()= 0)、最後のレコードフィールド値を取得します。フィールドが値を持つ場合、それは大丈夫です(最後のレコードから値を取得しません)

私のコードは以下のお気に入り:

var dr = this.SqlExecutor.Open(sql); //sql is String variable that stored the sql statement 
while (dr.Read()) 
{ 
    this.Logger.Info("-----Customer_Id: " + this.SqlReader.GetFieldAsString(dr, "Customer_Id") + " -----"); // this not duplicated because it's not empty 
    this.Logger.Info("-----Customer_Email: " + this.SqlReader.GetFieldAsString(dr, "Customer_email") + " -----"); //this would if some records has empty value 
} 

//メソッドSqlExecutor.Open(SQL)とSqlReader.GetFieldAsStringを()以下を参照してください。

以外にも
public IDataReader Open(string sql) 
    { 
     this.Logger.Debug("sql: " + sql); 
     if (this.reader != null && !this.reader.IsClosed) 
     { 
      this.reader.Close(); 
      this.reader = null; 
     } 

     try 
     { 
      this.cmdForSelect.Connection = this.conn; 
      this.cmdForSelect.CommandTimeout = 120; 
      this.cmdForSelect.CommandText = sql; 

      this.cmdForSelect.Parameters.Clear(); 
      foreach (var p in this.dbParameters) 
      { 
       this.cmdForSelect.Parameters.Add(p); 
      } 

      this.reader = cmdForSelect.ExecuteReader(); 
     } 
     catch (Exception ex) 
     { 
      this.Logger.Error("There is an error: {0}", ex.Message); 
      this.Logger.Info("Error sql query:" + sql); 
      throw; 
     } 
     finally 
     { 
      this.ClearParameters(); 
     } 

     return this.reader; 
    } 


    public string GetFieldAsString(IDataReader dr, string fieldName) 
    { 
     try 
     { 
      var value = dr.GetValue(dr.GetOrdinal(fieldName)); 

      if (value == DBNull.Value) 
      { 
       return string.Empty; 
      } 

      return Convert.ToString(value); 
     } 
     catch 
     { 
      return string.Empty; 
     } 
    } 

、この場合は、ちょうど私の顧客のコンピュータ上で起こった、私はこれはmycodeとは関係ありません、誰もがこれを知って、私を助けてください感じて、自分のコンピュータ上おかげでたくさんの素晴らしいです! !!

答えて

0

実際のコードがあなたの質問には載っていないと仮定します。私は問題は、実際のコードで変数の再開始と考えています。あなたはコードを再訪し、this.SqlReader.GetFieldAsString(dr、 "Customer_email")に適用したIF-ELSE条件を確認する必要があります

+0

ありがとう、私はSqlReader.GetFieldAsString()を貼り付けます。それ? –

関連する問題