[英]C# using odbcDataReader: Change decimal seperator from “.” to “,” in Decimal value
[英]c# odbcDatareader get the duplicated field value
我有一個奇怪的問題:
數據庫:Firebird連接字符串:Driver = {Firebird / InterBase(r)driver}; Dbname = xxx; CHARSET = NONE; UID = xxx; 密碼= xxx
我使用一組ODBC類來操作(選擇)數據庫表
當我使用OdbcDataReader.GetValue()循環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無關,任何人都知道這一點,請幫幫我,非常感謝!!!
假設實際代碼未發布在您的問題中; 我認為問題在於實際代碼中變量的重新初始化。 您需要重新訪問代碼並檢查已在this.SqlReader.GetFieldAsString(dr,“ Customer_email”)上應用的IF-ELSE條件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.