DataReader.GetString() 通过列名

发布于 2024-09-09 02:15:07 字数 350 浏览 2 评论 0原文

Dictionary Fields = new Dictionary();
for (int i = 0; i < reader.FieldCount; i++)
{
     Fields.Add(reader.GetName(i), i);
}

this._MyField1 = reader.GetString(Fields["field1"]);
this._Myfield2 = reader.GetInt16(Fields["field2"]);

这样做让我想哭,但除了这种方式之外,我似乎无法弄清楚如何通过列名使用特定于类型的检索方法。请告诉我有更好的方法。这是专门针对 DB2 的,但如果可能的话,我希望该解决方案也适用于 MS Sql

Dictionary Fields = new Dictionary();
for (int i = 0; i < reader.FieldCount; i++)
{
     Fields.Add(reader.GetName(i), i);
}

this._MyField1 = reader.GetString(Fields["field1"]);
this._Myfield2 = reader.GetInt16(Fields["field2"]);

doing this makes me want to cry but i can't seem to figure out how to use the type specfic retrieval methods by column name other than this way. please tell me there is a better way. this is specificly for DB2 but i would like the solution to work for MS Sql also if possible

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

没有你我更好 2024-09-16 02:15:07

您正在寻找 GetOrdinal< /code>方法:

this._MyField1 = reader.GetString(dr.GetOrdinal("field1"));
this._Myfield2 = reader.GetInt16(dr.GetOrdinal("field2"));

我通常将序号缓存在匿名类型中,以提高性能和可读性:

// ...
using (IDataReader dr = cmd.ExecuteReader())
{
    var ordinals = new {
                           Foo = dr.GetOrdinal("Foo"),
                           Bar = dr.GetOrdinal("Bar")
                       };

    while (dr.Read())
    {
        DoSomething(dr.GetString(ordinals.Foo), dr.GetInt16(ordinals.Bar));
    }
}
// ...

You're looking for the GetOrdinal method:

this._MyField1 = reader.GetString(dr.GetOrdinal("field1"));
this._Myfield2 = reader.GetInt16(dr.GetOrdinal("field2"));

I generally cache the ordinals in an anonymous type for performance and readability:

// ...
using (IDataReader dr = cmd.ExecuteReader())
{
    var ordinals = new {
                           Foo = dr.GetOrdinal("Foo"),
                           Bar = dr.GetOrdinal("Bar")
                       };

    while (dr.Read())
    {
        DoSomething(dr.GetString(ordinals.Foo), dr.GetInt16(ordinals.Bar));
    }
}
// ...
相思故 2024-09-16 02:15:07

使用 Assembly System.Data.SqlClient 中的 SqlDataReader,您可以执行以下操作(示例):

List<string> list = new();
string query = "SELECT * FROM [YourTable]";
using SqlConnection conn = new(YourConnectionString);
using SqlCommand cmd = new(query, conn);
conn.Open();
using SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read() && reader.HasRows)
{
    int columnNumber = reader.GetOrdinal("ColumnName")
    list.Add(reader.GetString(columnNumber));
}

对象 GetOrdinal(string) 的方法 GetOrdinal(string) code>SqlDataReader,接受您想要获取的列名并返回列号。
该数字可用于方法 GetString(int)

Using SqlDataReader from Assembly System.Data.SqlClient, you can do the following (example):

List<string> list = new();
string query = "SELECT * FROM [YourTable]";
using SqlConnection conn = new(YourConnectionString);
using SqlCommand cmd = new(query, conn);
conn.Open();
using SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read() && reader.HasRows)
{
    int columnNumber = reader.GetOrdinal("ColumnName")
    list.Add(reader.GetString(columnNumber));
}

The method GetOrdinal(string) from the object SqlDataReader, accept the column name you desire to get and return the column number.
That number can be use for the method GetString(int)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文