所以我有一个问题。我有一个MS Access .mdb数据库文件作为我项目中的DataSet。我正在尝试向数据集中添加一个新行(记录)以保存到数据库中。请在下面找到我正在使用的代码:
Function CreateUser(userId As String, pwd As String, pin As String, fnam As String, lnam As String, email As String) As Boolean
Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
Using dt As New dbUsersDataSet.tUserDetailsDataTable
Dim newRow As DataRow = dt.NewRow
newRow("fUserID") = userId
newRow("fPassword") = pwd
newRow("fPin") = pin
newRow("fFirstName") = fnam
newRow("fLastName") = lnam
newRow("fEmailAddress") = email
dt.Rows.Add(newRow)
Return True
End Using
End Using
End Function
我也尝试过使用表适配器的Insert查询:
INSERT INTO `tUserDetails` (`fUserID`, `fPassword`, `fPin`, `fFirstName`, `fLastName`, `fEmailAddress`) VALUES (?, ?, ?, ?, ?, ?)
但我不确定如何编码?
任何帮助?
----------------------------------------- EDIT ----- ----------------------------------
好的,这就是我现在正在尝试的内容:
Using ds As New dbUsersDataSet
Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
ta.InsertQuery(userId, pwd, pin, fnam, lnam, email)
ta.Update(ds)
Return True
End Using
End Using
我也试过这个:
Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
ta.InsertQuery(userId, pwd, pin, fnam, lnam, email)
Return True
End Using
这里是TableAdapter的INSERT查询:
INSERT INTO `tUserDetails` (`fUserID`, `fPassword`, `fPin`, `fFirstName`, `fLastName`, `fEmailAddress`) VALUES (?, ?, ?, ?, ?, ?)
然而,它仍然根本不起作用,我很困惑。数据库没有任何事情发生。
答案 0 :(得分:1)
好的,所以我解决了我的问题:
Using ds As New dbUsersDataSet
Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
Using dt As New dbUsersDataSet.tUserDetailsDataTable
ta.Fill(dt)
ta.InsertQuery(userId, pwd, pin, fnam, lnam, email)
ta.Update(dt)
Return True
End Using
End Using
End Using
我很确定这是因为我忽视了Fill方法。
无论如何,欢呼jmcilhinney为你提供帮助!
答案 1 :(得分:0)
您拥有的代码是向DataTable
添加一行,虽然它的行为不正确,但它并没有将DataTable
的内容保存回数据库。
首先,如果您希望能够添加单行,那么您应该在表适配器上启用DB Direct命令(如果尚未添加)。您可以在DataSet设计器中配置它。这样做是为表适配器添加Insert
,Update
和Delete
方法,允许您直接在数据库中直接插入,更新或删除记录,而无需使用{ {1}}。代码看起来像这样:
DataTable
如果您要使用键入的Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
ta.Insert(userId, pwd, pin, fnam, lnam, email)
End Using
,请正确使用它,这将是这样的:
DataTable
使用类型化DataSet的全部意义在于不必按字符串标识列,因此请使用正确的方法和属性。最后,不是最后的Using ta As New dbUsersDataSetTableAdapters.tUserDetailsTableAdapter
Using dt As New dbUsersDataSet.tUserDetailsDataTable
Dim newRow = dt.NewUserDetailsRow()
newRow.fUserID = userId
newRow.fPassword = pwd
newRow.fPin = pin
newRow.fFirstName = fnam
newRow.fLastName = lnam
newRow.fEmailAddress = email
dt.AddUserDetailsRow(newRow)
ta.Update(dt)
End Using
End Using
调用,这实际上是将Update
中的更改保存到数据库中。否则,表适配器有什么意义呢?