对象引用未设置为对象的实例(不知道我该怎么做)

时间:2012-06-06 16:48:24

标签: c# asp.net sql

这是错误:

  

异常详细信息:System.NullReferenceException:不是对象引用   设置为对象的实例。

它停在这里:con.Open();

这是代码:

SqlConnection con = new SqlConnection(DBHelper.connection);
    SqlCommand com = new SqlCommand();
    con = com.Connection;
    con.Open();
    com.CommandType = CommandType.Text;
    com.CommandText = "select catname,catdescription,photo from category where catid=" + catselectddl.SelectedValue ;
     SqlDataReader dr= com.ExecuteReader();
     DataTable dt = new DataTable();
     dt.Load(dr);
     DataRow drr;
     drr=dt.Rows[0];
     con.Close();

错误:

Line 19:         SqlCommand com = new SqlCommand();
Line 20:         con = com.Connection;
Line 21:         con.Open(); // here the error
Line 22:         com.CommandType = CommandType.Text;
Line 23:         com.CommandText = "select catname,catdescription,photo from category where catid=" + catselectddl.SelectedValue 

5 个答案:

答案 0 :(得分:2)

第三行是错误的。它应该是

  com.Connection = con;

答案 1 :(得分:2)

您需要更改此行(此时com.Connectionnull):

con = com.Connection;

到此:

com.Connection = con;

答案 2 :(得分:2)

您以错误的顺序分配连接。您应该将在第一行创建的连接分配给SqlCommand,而不是将SqlCommand(尚未创建)的连接分配给您之前创建的SqlConnection变量。

SqlConnection con = new SqlConnection(DBHelper.connection);
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con

在执行命令之前,您还应检查连接状态以确保其成功打开。

答案 3 :(得分:0)

试试这个:

SqlConnection con = new SqlConnection(DBHelper.connection);
SqlCommand com = con.CreateCommand();
con.Open();
com.CommandType = CommandType.Text;
com.CommandText = "select catname,catdescription,photo from category where catid=" + catselectddl.SelectedValue ;
 SqlDataReader dr= com.ExecuteReader();
 DataTable dt = new DataTable();
 dt.Load(dr);
 DataRow drr;
 drr=dt.Rows[0];
 con.Close();

您实际上是在尝试从命令创建连接 - 需要为命令分配连接,反之亦然。

我还建议使用我喜欢的“使用”语法,它也会处理命令和连接。

using (SqlConnection con = new SqlConnection(DBHelper.connection))
{
  using(SqlCommand com = con.CreateCommand())
  {
   con.Open();
   com.CommandType = CommandType.Text;
   com.CommandText = "select catname,catdescription,photo from category where catid=" + catselectddl.SelectedValue ;
   SqlDataReader dr= com.ExecuteReader();
   DataTable dt = new DataTable();
   dt.Load(dr);
   DataRow drr;
   drr=dt.Rows[0];
   }
 }

答案 4 :(得分:0)

“选择catname,catdescription,照片来自catid =”+ catselectddl.SelectedValue

的类别

旁注:
这种类型的SQL脚本,如果变成习惯,将打开SQL-Injection的大门;我认为没有开发人员喜欢这种类型的漏洞...