如何解决从数据库中的c#中删除
| 我正在使用VS10 Express在C#WPF中编写应用程序。 我不得不说我是C#和VS的初学者,但是我在Google上搜索了很多示例,我真的想自己解决这个问题。 我有一个本地数据库(mydatabase.sdf),在加载窗口时,我用一些数据填充了该数据库的表。该表的字段之一需要一个唯一的值,因此我想在每次加载时都放入相同的数据,但是我得到的是错误,而不是偏离正常值。 我想在重新填充之前从数据库中删除所有数据,这似乎很简单,但我无法正常工作... 我试过了dataset.Tables[\"mytable\"].Clear()
那是行不通的,似乎只是从datagrid(dataTable)中删除数据,而不是从数据存储中删除。
我也尝试过:
for (int i = 0; i < dataset.Tables[\"mytable\"].Rows.Count; i++)
{
dataset.Tables[\"mytable\"].Rows[i].Delete();
}
this.TableAdapter.Update(this.dataset);
但是在启动时,“ 2”语句在启动时返回零,但是如果我输入数据,则会得到“唯一值错误”。
删除它的唯一方法是从数据网格中手动将其删除,然后按下“更新”按钮,这实际上会将其从数据存储中删除。
由于开发原因,无法选择使数据库中的该字段不唯一。
如何在程序加载时从数据存储/数据库(mydatabase.sdf)中删除真正的数据?
编辑
这是我如何用数据填充数据库的代码:
public void FillInternet()
{
klantenTableAdapter1.ClearBeforeFill = false;
string MyConString = \"SERVER=myserver;\" +
\"DATABASE=mydb;\" +
\"UID=myuid;\" +
\"PASSWORD=mypass;\";
MysqLConnection connection = new MysqLConnection(MyConString);
MysqLCommand command = connection.CreateCommand();
MysqLDataReader Reader;
command.CommandText = \"SELECT klantnr,voorletters,roepnaam,achternaam,tussenvoegsel,meisjesnaam,straat,huisnr,subhuisnr,postcode,plaats,telthuis,telmobiel,telwerk,fax,email,geboortedatum FROM klanten ORDER BY klantnr\";
connection.open();
Reader = command.ExecuteReader();
try
{
while (Reader.Read())
{
DaTarow newLogRow = dataset1.Tables[\"klanten\"].NewRow();
var thisrow = \"\";
for (int i = 0; i < Reader.FieldCount; i++)
{
thisrow = Reader.GetValue(i).ToString();
newLogRow[Reader.GetName(i)] = thisrow;
}
dataset1.Tables[\"klanten\"].Rows.Add(newLogRow);
this.klantenTableAdapter1.Update(this.dataset1);
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(\"Error: \" + ex.Message,\"Fout\",MessageBoxButton.OK,MessageBoxImage.Error);
}
dataset1.AcceptChanges();
//Fill from internet
//da.Fill(dataset1.klanten);
//Fill from local database
klantenTableAdapter1.Fill(dataset1.klanten);
this.klantenTableAdapter1.Update(this.dataset1);
this.DataContext = dataset1.klanten.defaultview;
}
解决方法
ADO.NET使用“断开连接”记录集模型。它在客户端结构(DataSet和DataTable)中保留数据的副本。需要将对客户端结构的更新/插入/删除推回数据库。您需要阅读ADO.NET才能对这个过程有一个基本的了解,并可以了解ADO.NET事件模型,如果您想做任何涉及典型的现实世界复杂性的事情,这将是必需的。关于ADO.NET的书籍很多,因为它是功能丰富的中间层数据层,具有很大的复杂性。
为了您的目的,您可以阅读ADO.NET Command对象和SQL \“ delete \”命令。您还需要研究ADO.NET如何处理自动递增的主键,这是断开连接模型中最棘手的方面之一。
如果数据库本身定义了自动增量键,则除非在后端临时关闭自动增量,否则在插入新行时不能提供该值。这不是ADO.NET问题,顺便说一句。那是100%的后端。
, 从您的其他文章中,我假设您的数据库也是MySQL。您提到了一个唯一列,通常表示自动递增列。如果您在构建完条目后(例如从1-10开始)“删除”这些条目,然后尝试将下一个周期重新添加为相同的1-10项,它会给您以下信息而窒息。如果您从上次使用的表开始向表中添加数字,请查看是否有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。