gpt4 book ai didi

c# - c# 从数据库中删除

转载 作者:搜寻专家 更新时间:2023-10-30 22:19:18 24 4
gpt4 key购买 nike

我正在使用 VS10 Express 在 C# WPF 中编写一个应用程序。我不得不说我是 C# 和 VS 的初学者,但我在 Google 上搜索了很多示例,我真的试图自己解决这个问题..

我有一个本地数据库 (mydatabase.sdf),在我的窗口加载时,我用一些数据填充该数据库的一个表。该表的其中一个字段需要一个唯一值,所以我想在每次加载时都放入相同的数据,但我得到了一个错误而不是当然。

我想在重新填充之前从数据库中删除所有数据,这似乎很容易,但我没有让它工作...

我试过了

dataset.Tables["mytable"].Clear()

这不起作用,它似乎只是从数据网格 (dataTable) 中删除数据,而不是真正从数据存储中删除数据。

我也试过:

for (int i = 0; i < dataset.Tables["mytable"].Rows.Count; i++)
{
dataset.Tables["mytable"].Rows[i].Delete();
}
this.TableAdapter.Update(this.dataset);

但是在启动时 dataset.Tables["mytable"].Rows.Count 语句在启动时返回零,但是如果我输入数据,我会得到“唯一值错误”。

删除它的唯一方法是从数据网格中手动删除它,然后按下更新按钮,这实际上是从数据存储中删除它。

由于开发原因,无法使数据库中的该字段不唯一。

如何在我的程序加载中从数据存储/数据库 (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 命令对象和 SQL“删除”命令。您还需要探索 ADO.NET 如何处理自动递增主键,这是断开连接模型中最棘手的方面之一。

如果数据库本身定义了一个自动递增键,则在插入新行时不能提供该值,除非您在后端暂时关闭自动递增。顺便说一句,这不是 ADO.NET 问题。那是 100% 后端。

关于c# - c# 从数据库中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com