黑马程序员技术交流社区

标题: 数据库连接抛出异常 [打印本页]

作者: 熊丽    时间: 2013-8-8 22:56
标题: 数据库连接抛出异常
本帖最后由 熊丽 于 2013-8-8 23:20 编辑

  1. <p>   using(SqlConnection sqlconn=new SqlConnection(connstr) )
  2.             {
  3.                 using (SqlCommand commd = new SqlCommand())
  4.                 {
  5.                     commd.CommandText = "delete * from Phone";
  6.                     commd.ExecuteNonQuery();
  7.                 }</p><p>            }</p>
复制代码
commd.ExecuteNonQuery();执行这条语句时抛出ExecuteNonQuery: Connection 属性尚未初始化异常
当加入commd.Connection =sqlconn;抛出异常: ExecuteNonQuery 要求已打开且可用的 Connection。连接的当前状态为已关闭。
这是为什么,请问怎么解决



作者: 许庭洲    时间: 2013-8-9 06:23
最好封装一个SQLHelper类方便使用,提供了ExecuteNonQuery(string sql,params SqlParameter[] parameters)等方法。网上有微软提供的最全的SQLHelper类,是Enterprise Library中的一部分。
作者: 追梦无悔    时间: 2013-8-9 06:33

  1. <p>   using(SqlConnection sqlconn=new SqlConnection(connstr) )
  2.             {
  3.                 using (SqlCommand commd = sqlconn.CreateCommand())//这个地方你写错了,不是new Command(),而是sqlconn.CreateCommandd()
  4.                 {
  5.                     commd.CommandText = "delete * from Phone";
  6.                     commd.ExecuteNonQuery();
  7.                 }</p><p>            }</p>
复制代码

作者: 高文咪    时间: 2013-8-9 08:42
你上面的代码没有把连接(sqlconn)打开
using(SqlCommand commd=new SqlCommand())
你也没有给你创建的连接(sqlconn)属性初始化。
你可以把上面改写成这样应该就可以了,下面是代码:
  1.             using (SqlConnection sqlconn = new SqlConnection(connstr))
  2.             {
  3.                 sqlconn.Open();
  4.                 using (SqlCommand cmd = sqlconn.CreateCommand())
  5.                 {
  6.                      commd.CommandText = "delete * from Phone";
  7.                      commd.ExecuteNonQuery();
  8.                 }
  9.             }
复制代码

作者: 熊丽    时间: 2013-8-9 08:45
高文咪 发表于 2013-8-9 08:42
你上面的代码没有把连接(sqlconn)打开
using(SqlCommand commd=new SqlCommand())
你也没有给你创建的连 ...

using是不需要open()的
作者: 熊丽    时间: 2013-8-9 08:46
高文咪 发表于 2013-8-9 08:42
你上面的代码没有把连接(sqlconn)打开
using(SqlCommand commd=new SqlCommand())
你也没有给你创建的连 ...

我在另外一个程序中这样写是可以通过的
作者: 高文咪    时间: 2013-8-9 09:02
熊丽 发表于 2013-8-9 08:46
我在另外一个程序中这样写是可以通过的

呵呵,试了下你那种写法,会报出和你一样的错误哦!本人觉得你要先给自己定义的连接创建一个command对象,这样才可以调用command里的方法去完成你下面的操作~~~
作者: 熊丽    时间: 2013-8-9 09:10
高文咪 发表于 2013-8-9 09:02
呵呵,试了下你那种写法,会报出和你一样的错误哦!本人觉得你要先给自己定义的连接创建一个command对象 ...

呵呵,O(∩_∩)O谢谢,我试试咯
作者: 彭家贰小姐    时间: 2013-8-9 10:20
本帖最后由 彭家贰小姐 于 2013-8-9 10:28 编辑

第一个报错:

SqlCommand commd = new SqlCommand() 修改为: SqlCommand commd = sqlconn.CreateCommand()
第二个报错:

添加sqlconn.Open();[不是很清楚楼主using时不open是怎么实现的?希望楼主分享代码]
第三个报错:

delete * from T_Mark 修改为: delete from T_Mark不能加*
最终代码
  1. private void btnConnect_Click(object sender, RoutedEventArgs e)
  2. {
  3. string connstr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;
  4. using (SqlConnection sqlconn = new SqlConnection(connstr))
  5. {
  6. sqlconn.Open();
  7. using (SqlCommand commd = sqlconn.CreateCommand())
  8. {
  9. commd.CommandText = "delete from T_Mark";
  10. commd.ExecuteNonQuery();
  11. }
  12. }
  13. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2