Проверка состояния IF внутри метода USING и SqlConnection - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь запустить проверку данных, выполнить некоторый код и передать данные из одного запроса SQL в другой.

Мой текущий код выглядит следующим образом:

public string SelectUniqueKeyNumber()
{
    string newList = string.Join(Environment.NewLine, listOfSkus).ToString();
    string key_id;
    string sqlConnectionString = @"someConnectionString";

    using (SqlConnection connection = new SqlConnection(sqlConnectionString))
    {
        connection.Open();

        SqlCommand command = new SqlCommand("select top 1 KEY_NUMBER from MyTable where QTY_ON_HAND > 0 " + newList + " order by NEWID()", connection);

        SqlDataReader readerKey = command.ExecuteReader();
        readerKey.Read();

        key_id = String.Format(readerKey[0].ToString());
    }

    SelectSkuNumber(key_id);
    return key_id;
}

Я пытаюсь проверить, не возвращает ли мое readerKey.Read() значение null. Если это произойдет, остановите процесс, в противном случае продолжите. Я попробовал это так, как показано ниже:

public string SelectUniqueKeyNumber()
{
    string newList = string.Join(Environment.NewLine, listOfSkus).ToString();
    string key_id;
    string sqlConnectionString = @"someConnectionString";

    using (SqlConnection connection = new SqlConnection(sqlConnectionString))
    {
        connection.Open();

        SqlCommand command = new SqlCommand("select top 1 KEY_NUMBER from MyTable where QTY_ON_HAND > 0 " + newList + " order by NEWID()", connection);

        SqlDataReader readerKey = command.ExecuteReader();
        readerKey.Read();

        if(readerkey.Read().ToString() == null)
        {
            //--- stop processing
        }
        else
        {
            key_id = String.Format(readerKey[0].ToString());
        }
    }

    SelectSkuNumber(key_id); //---> Then ...(key_id) is not declared value
    return key_id;
}

При этом я не могу получить доступ и передать данные SelectSkuNumber(key_id) из-за: Use of unassigned local variable 'key_id'

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Чтобы избежать этой конкретной проблемы, вы можете присвоить некоторое значение или n null для key_id, например. key_id = "";.

Но у вас есть еще одна проблема:

  1. Вы склонны к внедрению SQL, вам следует использовать Parameters коллекцию SqlCommand класса.

  2. Вы уверены, что правильно связали свой запрос? Предположим,

    newList = {"some", "thing"};
    

Тогда ваш запрос будет:

select top 1 KEY_NUMBER 
from MyTable where QTY_ON_HAND > 0
some
thing
order by NEWID()

Что очень, очень неправильно, если не сказать больше.

  1. if(readerkey.Read().ToString() == null) условие ... Read возвращает bool, то есть true или false, это не ссылочный тип, поэтому ToString() никогда не будет null, таким образом, условие всегда будет терпеть неудачу. Если вы хотите проверить, было ли NULL в базе данных, вы должны проверить:

    if (readerKey.Read() && readerKey["KEY_NUMBER"] == DBNull.Value)
    

, который сначала читает строку, а затем получает значение столбца в этой строке. Он использует короткое замыкание для случая, когда записи не возвращаются.

  1. readerKey.Read(); не требуется перед оператором if.
0 голосов
/ 07 сентября 2018

Все, что вам нужно сделать, это назначить что-то для key_id, когда вы объявите его, например:

string key_id = null; // not string key_id;

и позже, после использования:

if (key_id != null)
{
    SelectSkuNumber(key_id); //---> Then ...(key_id) is not declared value
}
return key_id;

Вызывающая функция должна, конечно, знать, что делать, если возвращается ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...