Проблема с строкой запросов в SQL cmd - PullRequest
0 голосов
/ 17 июля 2011

У меня есть следующий код:

    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 ();

.. и это не нуль .. элемент имеет все обязательные поля, такие как 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 голосов
/ 17 июля 2011

Я предполагаю, что нижеприведенная переменная является переменной типа int

purchase = (int) 

Следовательно, вы не сможете преобразовать нулевые значения в целое число, поэтому попробуйте изменить команду sql, как показано ниже

SELECT isNull(COUNT (*),0) FROM purchase

@ Марк. Мне очень жаль

Разве вы не хотите указывать имя столбца рядом с оператором min?Как показано ниже

SELECT Min(columnName) FROM myItems WHERE itemId=@ID ? 
0 голосов
/ 17 июля 2011

Я предполагаю, что в базе данных нет подходящей строки, поэтому строки не возвращаются. Sanity - проверьте результат от ExecuteScalar - в частности, проверьте его на ноль перед приведением к int. Также возможно, что столбец содержит ноль, но, возможно, я бы ожидал DBNull.Value для этого.

Также - используйте using для всех IDisposable объектов здесь; соединение и команда в частности.

...