我有一个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。所以我得出结论,每当我通过表适配器将一些数据更改为表时,我必须始终重新填充数据集?那有什么用呢?
答案 0 :(得分:1)
你这是错误的方式。您应该使用DataSet
进行更改(即,使用其表创建DataRow
并将这些行插入表中),然后从{{{{}}传递相应的DataTable
1}}到DataSet
,以便通过调用TableAdapter
Update
函数将更改保留到数据库
TableAdapter
直接调用tableAdapter.Update(dataSetName);
函数只会将数据插入数据库本身的表中;它对数据的任何本地副本(例如您的Insert
)没有任何影响。
作为旁注,尽量避免使用DataSet
等语言特定的功能。相反,要显示一个消息框,请尝试调用MsgBox
,因为这与语言无关。
修改强>
为了澄清,执行此操作的正确方法是创建新的MessageBox.Show(...)
,使用新值填充其列,将DataRow
添加到相应的表中,然后将表传递给{ {1}}通过DataRow
函数。
例如,我有......
TableAdapter
要插入包含这些值的行,我会这样做:
Update