C# 对象引用未设置为对象C的实例#

C# 对象引用未设置为对象C的实例#,c#,database,exception,C#,Database,Exception,我正试图用C#NET编写一个带有一些数据库交互的web应用程序。我有一个奇怪的例外,我不知道它是从哪里来的。我找到了它来自的方法,代码如下: protected void cmdDelete_Click(object sender, EventArgs e) { using (SqlConnection conn = new SqlConnection(@"Server=myname-PC\SQLEXPRESS;Database=dbNames;Trusted_Connection=Tr

我正试图用C#NET编写一个带有一些数据库交互的web应用程序。我有一个奇怪的例外,我不知道它是从哪里来的。我找到了它来自的方法,代码如下:

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

感谢您的帮助

您需要查看抛出错误的代码行和/或只是调试应用程序。否则,我只能猜测这可能发生在哪里:

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
如果没有更多的调试信息,这可能是最好的答案

那么是说cblNames.SelectedItem为null,还是说Split函数没有返回任何内容

好的,它是一个或另一个,只有您可以访问代码,所以在该行设置断点,当您点击断点时,检查
SelectedItem
是否为
null
或者
文本是否为
null
。确切地说,我们可以取消第二个“选项”,因为
Split
总是返回一些内容,即使它只是一个空数组,也不会返回
null

更新
根据您的评论,似乎未设置
SelectedItem
,因此您必须跟踪应该设置的
SelectedItem
,并验证它是否正确。查看您的代码,
cblNames
只能引发异常。检查stacktrace中的特定代码行。
另一方面,不建议将基本异常捕获为
catch(exception ex)
。始终使用特定于大小写的异常,例如
System.Data.SqlClient.SqlException
System.invalidooperationexception
。有关更多详细信息,请查看。

我遇到的问题是回发时没有获得值,因为我在page\u load函数中留下了这段代码:

If Not IsPostBack()

这是知识上的一个基本失误。从这个问题开始,我就一直在.NET中开发,我意识到用一种新语言犯错误是多么简单。感谢大家处理过去的noob me。

我相信它会为您提供一行代码,让您了解它的发生。。。异常的堆栈跟踪是什么?请在调试模式下运行应用程序并发布堆栈跟踪我对使用visual studio有点陌生。它会告诉我在哪里?我在写入页面时遇到异常。@m.webster这是异常的另一部分…exception.stacktracer将
消息
替换为
ToString()
当您在响应中放置错误时:
response.Write(“删除表:+ex.ToString())。。。这将打印整个异常,包括堆栈跟踪。现在学习如何使用调试器也很好。我感谢你花时间帮助我。所以到目前为止我发现SelectedItem没有被设置。它应该在用户选中复选框列表中的一个选项时设置。现在,当用户选中其中一个选项时,该表似乎刚刚重置。这是因为我将autopost设置为true吗?我的理解是(我可能错了,因为我只使用C#和visual studio编写了几天代码)当有人选中填充到组合框列表中的某个复选框时,该值“被选中”单击delete按钮时,选中的组合框应为“SelectedItem”,但由于某些原因,这种情况显然没有发生。有什么想法吗?@m.webster我不太确定。。。自动发布可能是一个问题,但我不熟悉各种表库的详细信息,因此在这方面我帮不了什么忙。我将“自动发布”设置为true,它会在您单击“删除”按钮之前清除选中的复选框。如果我将其设置为false,就好像值实际上没有保存。这现在真烦人。哈哈。@m.webster耶,对不起。。。我只是不知道它是怎么工作的。然而,我希望我的回答为你指明了正确的方向,即使你自己不能真正解决问题,那么至少别人会更容易帮助你。