初学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、用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");
但是vc里边是通过3个智能指针来操作的,不论是采用什么样的形式,归根到底还是通过3个智能指针来实现了。
我感觉c#可能也是这样的呀
其实两个差不多,不过会有些区别的,你仔细看看oledb的连接方法。
创建connection实例,然后使用open方法,打开数据连接,然后就可以使用command方法执行语句了
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();
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";
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();