ссылка на объект не установлена ​​для экземпляра объекта C # - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь написать веб-приложение с некоторым взаимодействием с базой данных в C # .NET.Я получаю странное исключение, из-за которого я не могу понять, откуда оно.Я нашел метод, из которого он исходит, и код выглядит следующим образом:

protected void cmdDelete_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(@"Server=myname-PC\SQLEXPRESS;Database=dbNames;Trusted_Connection=True;"))
    {
        try
        {
            conn.Open();
            SqlCommand comm = new SqlCommand("DELETE FROM Names WHERE FirstName=@FirstName AND LastName=@LastName", conn);
            char[] delims = new char[1];
            delims[0] = ' ';

            string[] names = cblNames.SelectedItem.Text.Split(delims);
            string fname = names[0];
            string lname = names[1];
            comm.Parameters.Add(new SqlParameter("@FirstName", fname));
            comm.Parameters.Add(new SqlParameter("@LastName", lname));
            comm.ExecuteNonQuery();
            conn.Close();
            cblNames.ClearSelection();
            LoadTable();
        }
        catch (Exception ex)
        {
            Response.Write("Delete Table: "+ex.Message);
        }
    }
}

Любая помощь приветствуется!

Ответы [ 4 ]

0 голосов
/ 08 июня 2012

Проблема, с которой я столкнулся, заключалась в том, что я не получал значение при обратной передаче, потому что я оставлял этот маленький кусок кода из функции page_load:

If Not IsPostBack()

Это была элементарная ошибка в знании. После этого вопроса я занимаюсь разработкой в ​​.NET и понимаю, насколько просто совершать ошибки на новом языке. Спасибо всем за то, что имели дело с прошлым noob me.

0 голосов
/ 27 марта 2012

так это говорит о том, что cblNames.SelectedItem имеет значение null или что функция Split просто ничего не возвращает?

Ну, это либо один, либо другой, и только у вас есть доступ к коду, поэтому установите точку останова на этой строке, а когда вы достигнете точки останова, проверьте, если SelectedItem равно null или если Text это null. Точнее, мы можем исключить второй «параметр», поскольку Split всегда что-то возвращает, даже если это просто пустой массив, он все равно не возвращает null.

Обновление

По вашим комментариям кажется, что SelectedItem не устанавливается, поэтому вы должны отследить, что должно установить SelectedItem и убедиться, что он делает это правильно.

0 голосов
/ 27 марта 2012

Глядя на ваш код, cblNames может вызывать только исключения. Проверьте трассировку стека для конкретной строки кода. С другой стороны, не рекомендуется перехватывать базовое исключение как catch (Exception ex). Вместо этого всегда используйте конкретные исключения, например System.Data.SqlClient.SqlException или System.InvalidOperationException. Для более подробной информации проверьте MSDN .

0 голосов
/ 27 марта 2012

Вам нужно будет посмотреть строку кода, в которую выдается ошибка, и / или просто отладить приложение. В противном случае я могу только догадываться, где это может происходить:

conn.Open(); //conn could be null (if your connection string is bad it would post back a null connection I believe
cblNames.SelectedItem.Text //cblNames could be null (doubtful), but SelectedItem definitely could
LoadTable(); could be throwing it up also

Без дополнительной отладочной информации это лучший ответ, который вы, вероятно, получите.

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