0

我有一个 sql 数据库,并为其中的示例表创建了一个数据集。

数据集是 HotelDataSet2,要插入其中的数据表适配器是Various_itemsTableAdapter。

 MsgBox(HotelDataSet2.various_items.Rows.Count)
 Various_itemsTableAdapter.Insert(Item_nameTextBox.Text, itemcode, PackingTextBox.Text, UomTextBox.Text, PriceTextBox.Text, RemarksTextBox.Text, TaxTextBox.Text, StatusCheckBox.Checked, Rate_inclusiveCheckBox.Checked)
 MsgBox(HotelDataSet2.various_items.Rows.Count)

这总是反映相同的计数,在插入之前和之后..但是如果我执行这个

MsgBox(HotelDataSet2.various_items.Rows.Count)
Various_itemsTableAdapter.Insert(Item_nameTextBox.Text, itemcode, PackingTextBox.Text, UomTextBox.Text, PriceTextBox.Text, RemarksTextBox.Text, TaxTextBox.Text, StatusCheckBox.Checked, Rate_inclusiveCheckBox.Checked)
Various_itemsTableAdapter.Fill(HotelDataSet2.various_items)
MsgBox(HotelDataSet2.various_items.Rows.Count)

它显示新计数为旧计数的 +1。所以我得出结论,每次我通过表适配器将一些数据更改为表时,我都必须始终重新填充数据集?那这有什么用??

4

1 回答 1

1

你以错误的方式解决这个问题。您应该使用DataSet来进行更改(即,DataRow使用其表创建 's 并将这些行插入表中),然后将适当DataTable的从传递DataSet给您TableAdapter,以便通过Update调用TableAdapter

tableAdapter.Update(dataSetName);

直接调用该Insert函数只会将该数据插入到数据库本身的表中;DataSet它对数据的任何本地副本(例如您的)没有任何影响。

附带说明一下,尽量避免使用特定于语言的函数,例如MsgBox. 相反,要显示消息框,请尝试调用MessageBox.Show(...),因为它与语言无关。

编辑

为了澄清,这样做的正确方法是创建一个新DataRow的,用新值填充其列,将其添加DataRow到适当的表中,然后将表传递给TableAdapter函数Update

例如,我有...

A DataSet named myDataSet
A DataTable in myDataSet called MyTable
A TableAdapter for MyTable called myTableAdapter
Two columns in that table, FirstName and LastName
Two TextBoxes called txtFirstName and txtLastName

要插入具有这些值的行,我会这样做:

DataRow row = myDataSet.MyTable.NewRow(); // creates a new row with the correct columns

row["FirstName"] = txtFirstName.Text;
row["LastName"] = txtLastName.Text;

myDataSet.MyTable.Rows.Add(row); // adds the new row to the in-memory table

myTableAdapter.Update(myDataSet); // persists all of the changes to the DataSet
于 2009-08-25T17:52:16.943 回答