int value2;
using (SqlConnection dataConnection = new SqlConnection(@"Data Source=MANNAN-PC\SQLEXPRESS;Initial Catalog=WareHouse;Integrated Security=True;"))
using (SqlCommand dataCommand = new SqlCommand("Select Sum(I_Quantity) from Itemswork where I_Detail='" + maskedTextBox2.Text + "' and Order_No ='" + maskedTextBox1.Text + "'", dataConnection))
{
dataConnection.Open();
value2 = Convert.ToInt32(dataCommand.ExecuteScalar());
}
它显示了DBnull的错误,因为我从中获取值的列已经是int
。我想知道在变量的value2
定义中获取该值的另一种方法是什么。
答案 0 :(得分:0)
请查看此处的备注部分:SqlCommand.ExecuteScalar Method
value2 = (Int32)dataCommand.ExecuteScalar();
答案 1 :(得分:0)
由于@Soner声明您应该使用参数化查询来减少与SQL注入等相关的问题。您实际遇到的一个问题是返回的结果是NULL
。
没有返回列的SUM
不是0,您可以做的是更改输出以在尝试将其解析为整数之前检查返回值IsDbNull
。 (参见Unable to cast object of type 'System.DBNull' to type 'System.String` - 虽然它解析为字符串逻辑是相同的)
ExecuteScalar将返回
- 如果没有结果集,则为null
- 否则结果集第一行的第一列,可能是DBNull。
(从链接问题修改的示例,未检查语法)
var tempObject = dataCommand.ExecuteScalar();
value2 = (tempObject == null || Convert.IsDBNull(tempObject) ? (int) tempObject: 0;