簡體   English   中英

SqlDataReader 按列名獲取值(不是序號)

[英]SqlDataReader Get Value By Column Name (Not Ordinal Number)

使用SqlDataReader 的方法,我可以通過傳入它的序數來獲取列的值,例如,如果我傳入read.GetValue(0) ,則獲取第一列的值,或者如果傳入read.GetValue(1)

在查看這些方法時,我沒有看到通過傳入列名(例如 ColumnID)來獲取列值的選項。 在我的神話示例中,我想傳入read.GetValueofColumn("ColumnID")並讀取列中的值(請注意,據我從方法列表中可以看出, GetValueofColumn方法不存在)。

我是否錯過了執行此操作的方法或執行此操作的方法?

您可以使用GetOrdinal方法獲取列的序號,因此您的調用可能是:

read.GetValue(read.GetOrdinal("ColumnID"));

Datareader具有數字(基於位置)方法和文本(基於字段名稱)方法。 因此,使用字段名稱,您可以獲得類似的值

object value = reader["some field name"];

(假設readerdatareader

遲到的答案,但是......這一直對我有用,我認為它更接近 OP 試圖實現的目標:

using (SqlCommand cmd = new SqlCommand(cmdString, cn))
using (SqlDataReader rs = cmd.ExecuteReader()) {

    if (rs.HasRows) {

        while (rs.Read()) {

            Meeting_DiscussionItems_MX di = new Meeting_DiscussionItems_MX();

            di._Discussion_Item_MX_ID   = (int) rs["Discussion_Item_MX_ID"];
            di._Meeting_ID              = (int) rs["Meeting_ID"];
            di._Discussion_Item_Name    = (string) rs["Discussion_Item_Name"];
            di._Display_Order           = (string) rs["Display_Order"];
            di._Status                  = (string) rs["Status"];
            di._Discussion_Items        = (string) rs["Discussion_Items"];
            di._ETOPS_Items             = (string) rs["ETOPS_Items"];
            di._Followup                = (string) rs["Followup"];
            di._Pinned                  = (string) rs["Pinned"];
            di._Active                  = (string) rs["Active"];

            _Meeting_DiscussionItems_MX.Add(di);
        }

    }
}

為方便起見,您可以添加一些這樣的助手:

public static string GetString(this SqlDataReader reader, string name) {
    return GetFieldValue<String>(reader, name, (string)null);
}

public static T GetFieldValue<T>(this SqlDataReader reader, string fieldName, T defaultvalue = default(T)) {
    try {
        var value = reader[fieldName];
        if (value == DBNull.Value || value == null)
            return defaultvalue;
        return (T)value;
    } catch (Exception e) {
        //SimpleLog.Error("Error reading databasefield " + fieldName + "| ", e);
    }
    return defaultvalue;
}

如您所見,讀取器允許使用字段名,但它返回一個需要轉換為正確數據類型的對象。 擴展會兼顧這兩個方面,並為字段為空時添加默認值。

您可以使用:

MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
    Console.WriteLine(rdr["id"] + " -- " + rdr["time"]);
}
rdr.Close();

其中idtime是列名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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