初学C#,想知道用ado.net添删改记录有几种操作,我看到的有:
1、用OleDbDataAdapter,但它要指定InsertCommand、UpdateCommand等,这个要自己写,还是能在vs里设置,还是自动生成。。
2、用OleDbCommand的ExecuteNonQuery方法执行,但会提示“执行操作应该在可用连接下,目前连接已经关闭”类似以下的InsertCommand怎么生产?
cmd = new OdbcCommand("INSERT INTO Customers (CustomerID, CompanyName) " + "VALUES (?, ?)", conn); 
cmd.Parameters.Add("@CustomerID", OdbcType.NChar, 5, "CustomerID"); 
cmd.Parameters.Add("@CompanyName", OdbcType.NVarChar, 40, "CompanyName"); 

解决方案 »

  1.   

    c#的我不知道,没有研究过,
    但是vc里边是通过3个智能指针来操作的,不论是采用什么样的形式,归根到底还是通过3个智能指针来实现了。
    我感觉c#可能也是这样的呀 
      

  2.   

    他都提示了哦~~你没有打开数据库连接。所以会执行失败,如果你确认使用的是oledb而不是odbc的话
    其实两个差不多,不过会有些区别的,你仔细看看oledb的连接方法。
    创建connection实例,然后使用open方法,打开数据连接,然后就可以使用command方法执行语句了
      

  3.   

    楼主你的问题我一个一个说
    1、用OleDbDataAdapter,但它要指定InsertCommand、UpdateCommand等,这个要自己写,还是能在vs里设置,还是自动生成。。 
    2、用OleDbCommand的ExecuteNonQuery方法执行,但会提示“执行操作应该在可用连接下,目前连接已经关闭” 
    第一个问题 OleDbDataAdapter 指定的insertCommadn,UpdateCommand 这个是需要自己写的 不过楼主可以去下一个SQLHelper 类,  现在实际开发都用这个类 这个类为我们已经写好了数据访问代码
    第二个问题 你这个 可能是声明连接没有打开 给你看个例子 不过我连接的是sqlserver数据库
     //创建连接
                SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
                //打开连接
                conn.Open();
                //创建命令对象
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.Text;
                cmd.Connection = conn;
                cmd.CommandText = "insert into users values('"+textBox1.Text+"',"+textBox2.Text+")";
                //执行SQL
                int i = cmd.ExecuteNonQuery();
                if (i>0)
                {
                    MessageBox.Show("ok");
                }
                else
                {
                    MessageBox.Show("error");
                }
                //关闭连接
                conn.Close();
      

  4.   

              conn = new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
                conn.Open();
                cmd = new SqlCommand("select * from students", conn);
                //创建数据集
                ds = new DataSet();
                //创建适配器
                ada = new SqlDataAdapter(cmd);
                //填充数据集
                ada.Fill(ds, "stu");
                conn.Close();
                //绑定
                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = "stu";
      

  5.   

    第一个问题:
    1、用OleDbDataAdapter,但它要指定InsertCommand、UpdateCommand等,这个要自己写,还是能在vs里设置,还是自动生成。。 
    可以自己写,直接写insertcommand属性就可以了;
    可以自动生成,使用SqlCommandBuilder myBuilder = new SqlCommandBuilder(myDataAdapter)可以生成dataadapter的insertcommand,但是前提是有selectcommand。2、用OleDbCommand的ExecuteNonQuery方法执行,但会提示“执行操作应该在可用连接下,目前连接已经关闭” 
    command对象中的conncetion数据连接已经关闭了。3、类似以下的InsertCommand怎么生产?             SqlConnection nwindConn = new SqlConnection(@"server=B321451588E441A\SQL2005;uid=sa;pwd=111;database=Northwind");      SqlCommand command = new SqlDataAdapter("SELECT * FROM Categories", nwindConn);       
                //添加数据的InsertCommand
                command.InsertCommand = new SqlCommand("Insert into Categories(CategoryName,Description) values"
    +" (@CategoryName,@Description)", nwindConn);
                //添加参数
    catDA.InsertCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");
    catDA.InsertCommand.Parameters.Add("@Description", SqlDbType.NText, 16, "Description");            command.ExecuteNonQuery();