为什么DataAdapter.Update什么都不更新
本文关键字:更新 什么 DataAdapter Update 为什么 | 更新日期: 2023-09-27 18:28:51
在下面的代码中,我在DataTable中添加了一行,并尝试更新数据库。结果,元素DataTable添加了行,但数据库中的表没有更改。
你能帮我解决这个问题吗。
string connstr = @"Data Source=(LocalDB)'v11.0;AttachDbFilename=|DataDirectory|db.mdf;"
+"Integrated Security=True";
string command = "SELECT * FROM myTable";
var adapter = new SqlDataAdapter(command, connstr);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
var ds = new DataSet();
try
{
adapter.Fill(ds);
DataTable tab = ds.Tables[0];
var r = tab.NewRow();
r["name"] = "TestName";
r["length"] = 1;
r["Comment"] = "SomeComment";
tab.Rows.Add(r);
adapter.Update(tab);
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
而不是适配器。更新(选项卡)我也尝试了适配器。更新(ds),但没有任何新内容。
这是我的桌子。https://i.stack.imgur.com/vhWFO.png
INSERT、UPDATE和DELETE命令由SqlCommandBuilder在我的代码中提供。为了检查它们的正确性,我调用了构建器的属性:
builder.GetInsertCommand().CommandText;
builder.GetUpdateCommand().CommandText;
builder.GetDeleteCommand().CommandText;
存在值
INSERT INTO [myTable] ([name], [length], [comment]) VALUES (@p1, @p2, @p3)
UPDATE [myTable] SET [name] = @p1, [length] = @p2, [comment] = @p3 WHERE (([Id] = @p4) AND ([name] = @p5) AND ([length] = @p6) AND ((@p7 = 1 AND [comment] IS NULL) OR ([comment] = @p8)))
DELETE FROM [myTable] WHERE (([Id] = @p1) AND ([name] = @p2) AND ([length] = @p3) AND ((@p4 = 1 AND [comment] IS NULL) OR ([comment] = @p5)))
据我所知,在我的情况下,会发生查询INSERT。在我看来,这没问题。
至于主键,我的表里有一个。
这是一个非常常见的场景。在项目项之间列出了数据库文件,并且将属性Copy To output Directory
设置为Copy Always
这意味着,每次启动调试会话时,Visual Studio都会将MDF文件从项目位置复制到BIN''debug文件夹(或x86和RELEASE变体),覆盖那里的文件
当然,这个副本没有在上一次运行中添加最新的记录。
所以你的代码工作正常,但你的项目配置严重破坏了你的检查
只需将您的属性更改为Do Not Copy
或Copy if Newer