2

这是错误:

异常详细信息: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 
4

5 回答 5

2

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

  com.Connection = con;
于 2012-06-06T16:52:43.357 回答
2

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

con = com.Connection;

对此:

com.Connection = con;
于 2012-06-06T16:52:53.453 回答
2

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

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

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

于 2012-06-06T16:53:10.730 回答
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];
   }
 }
于 2012-06-06T16:58:10.377 回答
0

"从 catid=" + catselectddl.SelectedValue 的类别中选择猫名、猫描述、照片

附带说明:
这种类型的 SQL 脚本,如果变成一种习惯,将会打开大门SQL-Injection;而且我认为没有开发人员喜欢这种类型的缺陷......

于 2012-06-06T17:50:47.847 回答