Dinesh Kumar Dora Ответов: 2

Выполнить.команда скалярного всегда возвращает значение null


Здравствуйте друзья,

Я написал код на C# для извлечения данных из базы данных.
public string GetDatabaseValues(string value)
        {
            string strCon = System.Configuration.ConfigurationManager.ConnectionStrings["RestAPIConnectionString"].ConnectionString;
            string str = "";
            using (SqlConnection myConnection = new SqlConnection(strCon))
            {

                using (SqlCommand cmd = new SqlCommand(@"select Result from Output where Moviename=@0", myConnection))
                {
                    try
                    {
                        myConnection.Open();
                        cmd.Parameters.AddWithValue("@0", value);
                        str = cmd.ExecuteScalar().ToString();


                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                    finally
                    {
                        myConnection.Close();
                        myConnection.Dispose();
                    }
                }
            }
            return str;
        }


В моей базе данных есть значения. Проблема здесь заключается в том, что, несмотря на то, что моя база данных содержит правильные значения, команда ExecuteScalar всегда отправляет нулевое значение, и это приводит к ошибке "Object Reference set to null".

Пожалуйста, помогите найти проблему в моем коде или, по крайней мере, дайте мне знать любую альтернативу команде ExecuteScalar.

Что я уже пробовал:

попробовал выполнить.Не задавал вопросов, но потерпел неудачу.

2 Ответов

Рейтинг:
7

Karthik_Mahalingam

использовать Преобразовать.Метод toString [^] вместо Метод toString[^]

str  = Convert.ToString( cmd.ExecuteScalar());

если нет результата для данного условия cmd.ExecuteScalar() будет вернуть null значение и если вы попытаетесь получить доступ к member в null object что, очевидно, приведет к Object reference ошибка

читать это c# - разница между Convert.ToString () и .Метод toString() [^]


Dinesh Kumar Dora

Привет Картик,

Спасибо за ответ. Как вы и предлагали, я попробовал обратиться.Метод toString. Теперь вместо null он посылает "". Но будьте уверены,в базе данных ценность присутствует. почему он не возвращает значение.

Karthik_Mahalingam

запустите этот запрос в sql studio и проверьте, что вы получаете
выберите результат из вывода, где Moviename= value

Dinesh Kumar Dora

Самое странное.. База данных имеет много значений. Этот код всегда посылает null для всех значений, присутствующих в БД, за исключением одного конкретного значения. Если я посылаю идентификатор этого конкретного значения, я всегда получаю точное соответствующее значение этого конкретного идентификатора. Но то же самое не работает для других ценностей. Все значения находятся в текстовом формате, и я не вижу никаких проблем с форматом, которые могут создать эту ситуацию.

Karthik_Mahalingam

попробуйте выбрать верхний 1 результат из вывода, где Moviename= value

Dinesh Kumar Dora

Никаких изменений в поведении

Karthik_Mahalingam

запустите запрос и проверьте
выберите результат из вывода, где Moviename= value
если он возвращает значение в sql studio, оно должно работать, иначе вы что-то упускаете

проверьте с помощью dataadapter один раз и попробуйте изменить значение "@0 " на " @a"

Dinesh Kumar Dora

Запрос работает в sql studio
Что мне теперь делать?

Dinesh Kumar Dora

Извините мой плохой. Приложение пыталось получить данные с какой-то другой машины, так как файл Web.config не обновлялся с новой строкой подключения.
:P
Глупые ошибки разрушают жизнь :D

Спасибо за вашу помощь. А также предложить мне использовать Convert.Метод toString.

Karthik_Mahalingam

крутой :)

Рейтинг:
2

Midi_Mick

Единственное, что я могу здесь придумать, это то, что, возможно, вашему поставщику sql не нравится числовое имя параметра. Попробуйте переименовать "@0 "в" @p0 " и посмотрите, имеет ли это значение.
В противном случае код выглядит нормально для меня.


Karthik_Mahalingam

Привет Мик
протестировано с "@0", это хорошо работает.