gpt4 book ai didi

c# - 按列和行或任何替代方式引用 SQLDataReader 中的数据

转载 作者:行者123 更新时间:2023-11-30 21:09:31 25 4
gpt4 key购买 nike

我正在运行一个存储过程,结果是这样的格式

+------+--------+-----+-------+
| ID | Resign | Sum | Count |
+------+--------+-----+-------+
| 1234 | 0 | 400 | 3 |
| 1234 | 1 | 800 | 4 |
+------+--------+-----+-------+

我试过这段代码来引用查询返回的值,但是它似乎没有按照我想要的方式工作

if (conn.State != ConnectionState.Open)
conn.Open();
SqlCommand sc = new SqlCommand();
sc.CommandText = "usp_GetResignPool";
sc.CommandType = CommandType.StoredProcedure;
sc.Connection = conn;
sc.Parameters.Add(AddParam(EndDate, "@EndDate"));
sc.Parameters.Add(AddParam(am_id, "@id"));

SqlDataReader reader;
reader = sc.ExecuteReader();

while (reader.Read())
{
if reader. // lost here
}

我怎样才能做这样的事情。 ↓

int resigned = 0, resign_count = 0, not_resigned = 0, notresign_count =0;

if (read["Resigned"] == 1)
{
resigned = read["sum"];
resign_count = read["count"];
}
else
{
not_resigned = read["sum"];
notresign_count = read["count"];
}

我使用 SQLDataReader 并不重要。

编辑:真实列名

ID        Resigned    sum                    count
--------- ----------- ---------------------- -----------

最佳答案

它不起作用,因为您的表中没有名为 "Resigned" 的列,就像您在使用 SqlDataReader 时那样。

编辑:我认为问题的根源在于您添加参数的方式。 AddParam() 不是您要使用的方法。因此,您的结果集可能是空的。

....

SqlCommand sc = new SqlCommand();
sc.CommandText = "usp_GetResignPool";
sc.CommandType = CommandType.StoredProcedure;
sc.Connection = conn;
sc.Parameters.AddWithValue("@EndDate", EndDate);
sc.Parameters.AddWithValue("id", am_id);

SqlDataReader reader;
reader = sc.ExecuteReader();

using (reader = sc.ExecuteReader())
{
while (reader.Read())
{
if (Convert.ToInt32(read["Resign"]) == 1)
{
resigned = Convert.ToInt32(read["Sum"]);
resign_count = Convert.ToInt32(read["Count"]);
}
else
{
not_resigned = Convert.ToInt32(read["Sum"]);
notresign_count = Convert.ToInt32(read["Count"]);
}
}
}

请注意我是如何将您的元素指示符更改为 "Resign" 的。这需要与数据集中返回的列相匹配。或者,您可以使用列号来获取它,如下所示:

        if (Convert.ToInt32(read[1]) == 1)   
{
resigned = Convert.ToInt32(read[2]);
resign_count = read[3];
}
else
{
not_resigned = Convert.ToInt32(read[2]);
notresign_count = Convert.ToInt32(read[3]);
}

此外,请记住,在每次迭代或您的 while 循环中,您将覆盖变量 resignedresign_count not_resignednotresign_count

关于c# - 按列和行或任何替代方式引用 SQLDataReader 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com