gpt4 book ai didi

c# - 使用 SUM() 的 SqlDataReader 和 SqlCommand

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

我有一个简单的查询,它在满足条件时对 SQL 数据库中的表中的列求和。

decimal stock = 0;

SqlCommand cmd = new SqlCommand();
SqlDataReader myRdr;
cmd.Connection = connection;
cmd.CommandText = "SELECT SUM(stock) AS stock FROM table WHERE id=@id AND condition=@condition";
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@id", SqlDbType.NVarChar, 15).Value = id;
cmd.Parameters.Add("@condition", SqlDbType.NVarChar, 15).Value = condition;

connection.Open();
myRdr = cmd.ExecuteReader();
if (myRdr.HasRows)
{
myRdr.Read();
stock += Convert.ToDecimal(myRdr1["stock"]);
}

myRdr1.Close();
cmd1.Dispose();
connection.Close();

如果表中有满足条件的条目,就可以正常工作。如果没有条目,它会抛出一个异常,说我尝试将 DBNull 类型转换为十进制,这是不可能的。我这样试过:

if (myRdr.HasRows)
{
myRdr.Read();
if (myRdr["stock"] != null)
{
stock += Convert.ToDecimal(myRdr1["stock"]);
}
}

但是还是会抛出异常。感谢您的帮助。

最佳答案

只需稍微更改一下您的查询:

SELECT SUM(stock) AS stock
FROM table
WHERE id=@id AND condition=@condition

为此:

SELECT ISNULL(stock, 0) AS stock
FROM (
SELECT SUM(stock) AS stock
FROM table
WHERE id=@id AND condition=@condition
) q

关于c# - 使用 SUM() 的 SqlDataReader 和 SqlCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20999601/

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