C# 对象引用未设置为对象C的实例#
我正试图用C#NET编写一个带有一些数据库交互的web应用程序。我有一个奇怪的例外,我不知道它是从哪里来的。我找到了它来自的方法,代码如下: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
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耶,对不起。。。我只是不知道它是怎么工作的。然而,我希望我的回答为你指明了正确的方向,即使你自己不能真正解决问题,那么至少别人会更容易帮助你。