大家好.我正试图从vb6更新一个应用程序到VB点网,并遇到了一个非常基本的问题.我稍后会添加代码.1 .



尝试将旧的VB6应用程序更新到VB.Net。我想我在语法上有问题。在任何情况下,向自动记录表插入一条新记录都很简单。(下面代码)。

我想问一些经常没有记录的问题。似乎我必须使用命令构建器等-是否没有办法我可以简单地使用SQL语句并对后台表执行它?当我正在开发时,这些表在Access中,但将在软件的最终版本中按比例增加。

我利用mygui底部的错误提示,将代码修改如下:

现在看起来是这样的,唯一的事情是它抛出了一个逻辑错误,那就是每个结束函数必须有一个前面的"函数"。也许我有点笨了

Function MAutolog(ByVal Action As String) As Boolean
Dim SQL = "Insert Into Autolog (Action) Values (@Action)"
Using con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersPC UserDocumentsFreightmasterresourcesfreightmaster.accdb"),
cmd As New OleDb.OleDbCommand(SQL, con)
cmd.Parameters.Add("@Action", OleDb.OleDbType.VarChar).Value = Action
con.Open()
cmd.ExecuteNonQuery()
End Using
MAutolog = True
End Function
我想提前感谢你的帮助。我无法告诉你我将多么感激你。

代码
Module ModFunctions
Function MAutolog(ByVal UserID As Long, ByVal Action As String) As Boolean
Dim dbprovider As String
Dim dbsource As String
Dim mydocumentsfolder As String
Dim fulldatabasepath As String
Dim TheDatabase As String
Dim SQL As String
Dim DS As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersPC UserDocumentsFreightmasterresourcesfreightmaster.accdb")

con.Open()

'----------------------------

SQL = "Select * from Autolog"
da = New OleDb.OleDbDataAdapter(SQL, con)
da.Fill(DS, "Log")
con.Close()

Dim CB As New OleDb.OleDbCommandBuilder(da)
Dim DSNEWROW As DataRow
DSNEWROW = DS.Tables("Log").NewRow()
DSNEWROW.Item("UserID") = UserID
DSNEWROW.Item("Action") = Action
DS.Tables("log").Rows.Add(DSNEWROW)
da.Update(DS, "log")

MAutolog = True
End function

数据库对象,如ConnectionCommand使用非托管代码,需要它们的Dispose方法来释放这些资源。要么在这些对象上调用此方法,要么使用Using...End Using块,即使有错误也会为您执行此操作。在此代码中,ConnectionCommand都包含在Using块中,用逗号将它们分开。

By Val是默认的,所以没有必要。

总是使用参数来避免sql注入。直接使用来自用户输入的值可能会允许恶意代码在数据库上执行。参数的值不被数据库视为可执行代码。

OleDb不关心参数名。你可以很容易地使用?在SQL语句中。我使用名称是为了便于阅读。您确实需要某种名称来添加参数。OleDb考虑参数在sql语句中的位置。位置必须与参数添加到参数集合的顺序匹配。

这是在自动编号字段中插入UserID的代码。您没有为自动编号字段提供值。数据库会处理的。
Function MAutolog(Action As String) As Boolean
Dim SQL = "Insert Into Autolog (Action) Values (@Action)"
Using con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersPC UserDocumentsFreightmasterresourcesfreightmaster.accdb"),
cmd As New OleDbCommand(SQL, con)
cmd.Parameters.Add("@Action", OleDbType.VarChar).Value = Action
con.Open()
cmd.ExecuteNonQuery()
End Using
MAutolog = True
End Function

如果UserID不是auto-number

Function MAutolog(UserID As Long, Action As String) As Boolean
Dim SQL = "Insert Into Autolog (UserID, Action) Values (@UserID, @Action)"
Using con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersPC UserDocumentsFreightmasterresourcesfreightmaster.accdb"),
cmd As New OleDbCommand(SQL, con)
cmd.Parameters.Add("@UserID", OleDbType.Integer).Value = UserID
cmd.Parameters.Add("@Action", OleDbType.VarChar).Value = Action
con.Open()
cmd.ExecuteNonQuery()
End Using
MAutolog = True
End Function

相关内容

  • 没有找到相关文章

最新更新