从表中获取变量值

时间:2014-07-24 10:45:28

标签: c# sql database sql-server-2008 dbnull

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定义中获取该值的另一​​种方法是什么。

2 个答案:

答案 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;