System.Data.OleDb.OleDbException: 没有为命令对象设置命令

时间:2022-09-10 15:37:06
我的代码如下:

private void btnmodify_click(object sender, System.EventArgs e)
{ if(Page.IsValid)
uid=Convert.ToInt32(Session["uid"].ToString());
strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../")+"data/users.mdb";
strSQL="Select pwd from information where id="+uid.ToString();
cn=new OleDbConnection(strConn);
cmd=new OleDbCommand(strSQL,cn);
cn.Open();
dr=cmd.ExecuteReader();
while(dr.Read())
{
             oldpwd=dr["pwd"].ToString();
}
dr.Close();
 if(txtoldpwd.Text!=oldpwd)
{
 lblerror.Text="密码错误!";
}
 else
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();

cn.Close();


}



运行后提示:

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.Data.OleDb.OleDbException: 没有为命令对象设置命令。

源错误: 


行 45:  strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
行 46:  cmd1=new OleDbCommand(strSQL1,cn);
行 47:  cmd1.ExecuteNonQuery();
行 48: 
行 49:  cn.Close();
 
请高手指教。

6 个解决方案

#1


楼主的这个错误应该是第二次的那个错误,datareader是连接形的,再单步调试一下看看

#2


这里不对:
 else
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();

cn.Close();
改成:
 else
{
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();
}
cn.Close();


#3


else
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();

cn.Close();
改成:
 else
{
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();
}
cn.Close();

#4


顺便说一下,建议你每次连接之后及时关闭数据库连接。
即:
dr.Close();
cn.Close();
if(txtoldpwd.Text!=oldpwd)
{
 lblerror.Text="密码错误!";
}
 else
         {
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cn.Open();
try
{
  cmd1.ExecuteNonQuery();
}
catch
{
}
         cn.Close();
         }

#5


strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
这句有问题,
改成
strSQL1="UPDATE information Set pwd ='"+txtpwd.Text.ToString()+"'";

#6


txtpwd.Text本来就是字符串,搞个ToString()不是多此一举吗

#1


楼主的这个错误应该是第二次的那个错误,datareader是连接形的,再单步调试一下看看

#2


这里不对:
 else
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();

cn.Close();
改成:
 else
{
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();
}
cn.Close();


#3


else
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();

cn.Close();
改成:
 else
{
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cmd1.ExecuteNonQuery();
}
cn.Close();

#4


顺便说一下,建议你每次连接之后及时关闭数据库连接。
即:
dr.Close();
cn.Close();
if(txtoldpwd.Text!=oldpwd)
{
 lblerror.Text="密码错误!";
}
 else
         {
strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
cmd1=new OleDbCommand(strSQL1,cn);
cn.Open();
try
{
  cmd1.ExecuteNonQuery();
}
catch
{
}
         cn.Close();
         }

#5


strSQL1="UPDATE information Set pwd ='txtpwd.Text.ToString()'";
这句有问题,
改成
strSQL1="UPDATE information Set pwd ='"+txtpwd.Text.ToString()+"'";

#6


txtpwd.Text本来就是字符串,搞个ToString()不是多此一举吗