我有下一个代码:
private int bla(out int itemsMin, out int purchase)
{
string ID = (Request.QueryString["Ttrsid"] ?? "0").ToString();
{
SqlConnection connection = new SqlConnection("Data Source=*****;Initial Catalog=****;User ID=****;Password=*****;Integrated Security=False;");
string commandtext = "SELECT Min FROM myItems WHERE itemId=@ID";
SqlCommand command = new SqlCommand(commandtext, connection);
connection.Open();
command.Parameters.AddWithValue("@ID", ID); //Adds the ID we got before to the SQL command
itemsMin = (int)command.ExecuteScalar();
string commandtext2 = "SELECT COUNT (*) FROM purchase";
SqlCommand command2 = new SqlCommand(commandtext2, connection);
purchase = (int)command2.ExecuteScalar();
}
return 0;
}
代码用于我使用的两个标签 - 一个用于获取最小数量(itemsMin),另一个用于购买计数。
我正在使用查询字符串来获取用户现在正在观看他的itemid的值..(来自地址栏(例如:items.aspx?Ttrsid = 5所以我想看到最小数量的Ttrsid = 5)。
一切正常。当我在Ttrsid = 1时,Ttrsid = 2 - 我得到了我想要的东西,但当我输入Ttrsid = 3等等时 - 那就是给我错误:
System.NullReferenceException
到线:
itemsMin =(int)command.ExecuteScalar();
..并且它不是null ..该项目包含所有必填字段,如Ttrsid = 2 ....所以这里有什么问题?
下一个代码是使用上面的命令:
int i, p; // variable need not be initialized
Console.WriteLine(bla(out i, out p));
if (i < p)
{
haha.Visible = true;
}
else
{
haha2.Visible = true;
}
Console.WriteLine(i);
Console.WriteLine(p);
i = itemsMin,p =购买。
答案 0 :(得分:0)
我猜测数据库中没有匹配的行,因此没有返回任何行。完整性检查ExecuteScalar的结果 - 特别是在转换为int之前检查它是否为null。列也可能包含null,但是我可能期望DBNull.Value。
此外 - 在此处对所有using
个对象使用IDisposable
;特别是连接和命令。
答案 1 :(得分:0)
我假设下面的粘贴变量是一个int类型变量
purchase = (int)
因此您可能无法将空值转换为整数,因此请尝试更改sql命令,如下所示
SELECT isNull(COUNT (*),0) FROM purchase
@Marc我真的很抱歉
您是否要在min语句旁边指定列名?如下
SELECT Min(columnName) FROM myItems WHERE itemId=@ID ?