Получите неправильный возврат, SQL - если - PullRequest
0 голосов
/ 17 июля 2011

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

    private bool bla()
{

    int Minbuy, ordersTillNow;
    {
        SqlConnection connection = new SqlConnection("Data Source=****;Initial Catalog=****;User ID=****;Password=****;Integrated Security=False;");
        string commandtext = "SELECT Minbuy FROM items WHERE main = 1";
        string commandtext2 = "SELECT ordersTillNow FROM items WHERE main = 1";

        SqlCommand command = new SqlCommand(commandtext, connection);
        SqlCommand command2 = new SqlCommand(commandtext2, connection);

        connection.Open();

        Minbuy = (int)command.ExecuteScalar();
        ordersTillNow = (int)command2.ExecuteScalar();

        if (Minbuy < ordersTillNow)
            return true;
        else
            return false;

    }



}

И использование метода при загрузке страницы:

        if (bla())
    {
        Image_V.Visible = true;
    }
    else
    {
       Image_X.Visible = true;
    }

Значения результата в запросе в SQL:

MinBuy = 5

ordersTillNow = 1

Странная вещь - не обращайте внимания на значение в БД (я изменил значение на: MinBuy = 1 и ordersTillNow = 8) - это отображение image_v. (на странице aspx - для обоих изображений visble установлено значение false).

Что не так в коде?

Название таблицы:

имя таблицы: предметы

столбцы: itemId (int), main (бит), MinBuy (int), ordersTillNow (int).

Ответы [ 3 ]

2 голосов
/ 17 июля 2011

Я могу подумать, что проблема может заключаться в том, что результат из приведенного выше SQL может возвращать более 1 строки.Таким образом, это даст неправильный результат.

Попробуйте изменить код на:

string commandtext = "SELECT TOP 1 Minbuy FROM items WHERE main = 1";
string commandtext2 = "SELECT TOP 1 ordersTillNow FROM items WHERE main = 1";

Вместо двух вариантов выбора вы можете использовать один выбор

string queryString = "SELECT Minbuy, ordersTillsNow FROM items WHERE main = 1";
using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        connection.Open();

        SqlCommand command = new SqlCommand(queryString, connection);
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            MinBuy = int.Parse(reader[0].ToString());
            ordersTillsNow = int.Parse(reader[1].ToString());
            //Console.WriteLine(String.Format("{0}", reader[0]));
        }
    }
1 голос
/ 17 июля 2011

Хорошо, давайте войдем в базу данных только один раз и заставим ее ответить на наш вопрос:

private bool bla()
{
    using(SqlConnection connection = new SqlConnection("Data Source=****;Initial Catalog=****;User ID=****;Password=****;Integrated Security=False;"))
    {
        string commandtext = "SELECT CONVERT(bit,CASE WHEN Minbuy < ordersTillNow THEN 1 ELSE 0 END) FROM items WHERE main = 1";
        SqlCommand command = new SqlCommand(commandtext, connection);
        connection.Open();
        return (bool)command.ExecuteScalar();    
    }
}

Этот код также гарантирует закрытие соединения, о котором вы ранее не заботились.Но если вы все еще не видите ожидаемых результатов, то, как и другие предлагали, вам нужно убедиться, что код отображения изображения работает так, как ожидалось.Возможно вместо:

Image_V.Visible = bla();
Image_X.Visible = !Image_V.Visible;

.

1 голос
/ 17 июля 2011

Возможно, вам нужно:

if (bla())
{
    Image_V.Visible = true;
    Image_X.Visible = false;
}
else
{
   Image_V.Visible = false;
   Image_X.Visible = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...