数据适配器不需要打开数据库连接
本文关键字:数据库连接 不需要 适配器 数据 | 更新日期: 2023-09-27 18:31:11
我尝试在C#.net中使用DataAdapter,但我仍然不了解DataAdapter。
我读了很多关于DataAdapter和DataReader的文章和博客。
我知道DataAdapter会在需要时自动打开和关闭数据库。
但
//conn.Open();
AdsDataAdapter da;
da = new AdsDataAdapter("Select * from Test", conn);
AdsCommandBuilder cb;
cb = new AdsCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds, "Test");
DataRow newrow = ds.Tables["Test"].NewRow();
newrow["Name"] = "How about";
ds.Tables["Test"].Rows.Add(newrow);
da.Update(ds, "Test");
当我运行上面的代码时,我收到一条错误消息,指出"连接必须打开"。
为什么适配器不能自动打开连接?
并且,我想使用 insertCommand 插入数据(对于此测试,我打开了连接)。
da.InsertCommand = new AdsCommand("INSERT INTO test (NAME) values('Insert Test #1')", conn);
//da.InsertCommand.ExecuteNonQuery(); // it works
da.Update(ds,"Test"); //but it does not works.
许多使用 Adapter.Update() 的示例,但对我来说,它不起作用:(
没有错误,也没有插入任何内容。
并使用 DA。InsertCommand.ExecuteNonQuery();而是 Update(),它可以工作。
我做错了什么?
谢谢!
MSDN说
Fill 方法隐式打开数据适配器的连接 如果发现连接尚未打开,则正在使用。 如果 填充打开连接,它也会关闭连接时 填充完成。 这可以简化您的代码,在处理 单个操作,例如填充或更新。
这意味着da.Fill(ds, "Test");
后,您的连接将被方法本身关闭。但是您需要打开它以进行以下更新(并且失败)
编辑:从上面的代码派生的伪代码
using(AdsConnection com = new AdsConnection(connectionString));
{
conn.Open();
using(AdsDataAdapter da = new AdsDataAdapter("Select * from Test", conn))
{
AdsCommandBuilder cb = new AdsCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds, "Test");
// Now the connection is still open and you can issue other commands
DataRow newrow = ds.Tables["Test"].NewRow();
newrow["Name"] = "How about";
ds.Tables["Test"].Rows.Add(newrow);
// da.Update should work here. No more connection closed.
da.Update(ds, "Test");
}
} // Exiting from the using block, the connection will be closed