黑马程序员技术交流社区

标题: ExecuteNonQuery();问题 [打印本页]

作者: 张彪    时间: 2011-11-30 12:06
标题: ExecuteNonQuery();问题
本帖最后由 张彪 于 2011-12-2 13:57 编辑

public static class DBConn
    {
          public static SqlConnection CyCon()
       {
           return new SqlConnection (@"Data Source=PC2011102013SPQ\SQLEXPRESS;Initial Catalog=library;Integrated Security=True");
            
       }
         // public static SqlConnection conn = new SqlConnection();
    }
   
}

private void button1_Click(object sender, EventArgs e)
        {
            
            SqlConnection conn = Basebase.DBConn.CyCon();
            DateTime date = new DateTime();
            try
            {

                DBConn.CyCon().Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = DBConn.CyCon();
                //更新数据
                cmd.CommandText = "Insert borrowandback   [readerid]='" + textBox1.Text + "'" +
                                                 //",[name]='" + dataGridView1.CurrentRow.Cells[0].Value.ToString() + "'" +
                                                 ",[bookcode]='" + dataGridView1.CurrentRow.Cells[2].Value.ToString() + "'" +
                                                 ",[borrowTime]='" + date.TimeOfDay + "'" + "'";
                                                 //",[paperType]='" + dataGridView1.CurrentRow.Cells[4].Value.ToString() + "'" +
                                                 //",[paperNum]='" + dataGridView1.CurrentRow.Cells[5].Value.ToString() + "'" +
                                                 //",[tel]='" + dataGridView1.CurrentRow.Cells[6].Value.ToString() + "'" +
                                                 //",[email]='" + dataGridView1.CurrentRow.Cells[7].Value.ToString() + "'" +
                                                 //",[createDate]='" + dataGridView1.CurrentRow.Cells[8].Value.ToString() + "'" +
                                                 //",[oper]='" + dataGridView1.CurrentRow.Cells[9].Value.ToString() + "'" + "where[id]='" + "'";
                cmd.ExecuteNonQuery();
                //刷新显示结果
                DataSet dalibrary = new DataSet();
                SqlDataAdapter dabaseInfrom = new SqlDataAdapter("Select* from borrowandback", DBConn.CyCon());
                dabaseInfrom.Fill(dalibrary, "borrowandback");
                //绑定数据库
                dataGridView1.DataSource = dalibrary.Tables["borrowandback"];
                MessageBox.Show("修改成功");
                DBConn.CyCon().Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "打开数据库失败!");
            }
        }
数据库连接正确为什么总是出现
作者: 王伟    时间: 2011-11-30 12:20
cmd.ExecuteNonQuery();前加上conn.open();试试
你connection连接没打开

作者: 谭显锋    时间: 2011-11-30 13:03
DBConn.CyCon().Open();
你这句代码是干嘛,打开数据库要先实例化一个SqlConnection对象,再用对象的open()打开呀。如:SqlConnection conn =new SqlConnection();
conn.open();
作者: 付炯    时间: 2011-11-30 13:46
本帖最后由 付炯 于 2011-11-30 13:46 编辑

cmd应该由conn对象利用CreateCommand()方法创建
另外没看到conn.Open()语句啊
作者: 王硕    时间: 2011-11-30 14:09
DBConn.CyCon().Open();应该改成conn.open()才对啊
作者: 邹老师    时间: 2011-11-30 14:17
DBConn.CyCon()方法中每次都创建了一个新的 SqlConnection对象,所以每次调用这个方法所返回的 连接对象都不是同一个。
可以试试这么写:
SqlConnection conn = DBConn.CyCon();
SqlCommand cmd = new SqlCommand("select......",conn);
conn.Open();
cmd.Excute.......
conn.close();

作者: 杨楠    时间: 2011-11-30 15:23
整出了三个connection了。。。直接conn.open()就哦了
作者: 李海龙    时间: 2011-11-30 15:25
说实话你的这个我真没太明白,你吧打开和关闭 专门建立一个类,类中定义打开 关闭方法 直接调用
我给你改上面的类 你试试
public  class DBConn
{
     // 数据库连接字符串
     private  string sql = "Data Source=PC2011102013SPQ\SQLEXPRESS;Initial Catalog=library;Integrated Security=True";
     //数据库连接对象 conn
     private SqlConnection conn;
     ///CONN对象
     public SqlConnection CONN
     {
          get
          {
               if(conn==null)
               {
                    conn = new SqlConnection(sql);
               }
               return conn;
          }
    }
    ///打开数据库
  public void OpenCONN()
   {
         if(CONN.State == CONNState.Closed)
         {
              CONN.Open();
         }
         else if(CONN.State == CONNState.Broken)
         {
             CONN.Clsoe();
             CONN.Open();
          }
   }
   ///关闭数据库
  public void CloseCONN()
   {
        if(CONN.State == CONNState.Open || CONN.State == CONNState.Broken)
        {
            CONN.Close();
        }
   }
}
我的方法是非静态的   你初始化一下 在try里面直接调用  -- catch(e) -- finally(关闭数据库方法)

作者: 张连印    时间: 2011-11-30 23:21
问题出在没有SqlCommand对象指定connection
修改方法:
1.添加:cmd.Connection = conn;
2.将SqlCommand 初始化变为:
     SqlCommand cmd=conn.CreateCommand();




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