簡體   English   中英

c#odbcDatareader獲取重復的字段值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM