私は奇妙な問題を有する: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とは関係ありません、誰もがこれを知って、私を助けてください感じて、自分のコンピュータ上おかげでたくさんの素晴らしいです! !!
ありがとう、私はSqlReader.GetFieldAsString()を貼り付けます。それ? –