SQL cmd中查询字符串的问题

时间:2011-07-17 11:31:47

标签: c# asp.net sql query-string

我有下一个代码:

    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 =购买。

2 个答案:

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