A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张彪 黑马帝   /  2011-11-30 12:06  /  3552 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张彪 于 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 + "打开数据库失败!");
            }
        }
数据库连接正确为什么总是出现

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

8 个回复

倒序浏览
王伟 黑马帝 2011-11-30 12:20:29
沙发
cmd.ExecuteNonQuery();前加上conn.open();试试
你connection连接没打开
回复 使用道具 举报
DBConn.CyCon().Open();
你这句代码是干嘛,打开数据库要先实例化一个SqlConnection对象,再用对象的open()打开呀。如:SqlConnection conn =new SqlConnection();
conn.open();

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
付炯 黑马帝 2011-11-30 13:46:33
板凳
本帖最后由 付炯 于 2011-11-30 13:46 编辑

cmd应该由conn对象利用CreateCommand()方法创建
另外没看到conn.Open()语句啊

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
王硕 黑马帝 2011-11-30 14:09:24
报纸
DBConn.CyCon().Open();应该改成conn.open()才对啊

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
邹老师 版主 2011-11-30 14:17:40
地板
DBConn.CyCon()方法中每次都创建了一个新的 SqlConnection对象,所以每次调用这个方法所返回的 连接对象都不是同一个。
可以试试这么写:
SqlConnection conn = DBConn.CyCon();
SqlCommand cmd = new SqlCommand("select......",conn);
conn.Open();
cmd.Excute.......
conn.close();
回复 使用道具 举报
杨楠 金牌黑马 2011-11-30 15:23:40
7#
整出了三个connection了。。。直接conn.open()就哦了
回复 使用道具 举报
李海龙 黑马帝 2011-11-30 15:25:26
8#
说实话你的这个我真没太明白,你吧打开和关闭 专门建立一个类,类中定义打开 关闭方法 直接调用
我给你改上面的类 你试试
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(关闭数据库方法)

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
张连印 黑马帝 2011-11-30 23:21:00
9#
问题出在没有SqlCommand对象指定connection
修改方法:
1.添加:cmd.Connection = conn;
2.将SqlCommand 初始化变为:
     SqlCommand cmd=conn.CreateCommand();

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马