Database vb.net ms access mdb表格插入记录代码无效
我想将数据插入MS Access数据库(mdb)表。代码如下所示:Database vb.net ms access mdb表格插入记录代码无效,database,vb.net,ms-access,Database,Vb.net,Ms Access,我想将数据插入MS Access数据库(mdb)表。代码如下所示: Imports System.Data.OleDb Imports System.Data Dim Cmd As OleDbCommand Dim SQL As String Dim objCmd As New OleDbCommand Dim Con = New OleDbConnection("Provider=Microsoft.ace.oledb.12
Imports System.Data.OleDb
Imports System.Data
Dim Cmd As OleDbCommand
Dim SQL As String
Dim objCmd As New OleDbCommand
Dim Con = New OleDbConnection("Provider=Microsoft.ace.oledb.12.0; Data Source=" & pth & "\database.mdb; User Id=; Password=;")
MsgBox(RichTextBox1.SelectedText)
SQL = "insert into approved ( word, approveds) VALUES ('" & RichTextBox1.SelectedText & "', " & "'YES')"
MsgBox(SQL)
Cmd = New OleDbCommand(SQL, Con)
Con.Open()
objCmd = New OleDbCommand(SQL, Con)
objCmd.ExecuteNonQuery()
Con.Close()
它显示以下错误消息
System.Data.dll中发生类型为“System.Data.OleDb.OLEDBEException”的未处理异常
其他信息:条件表达式中的数据类型不匹配
谁能帮忙吗
或任何其他程序第一件事
你希望“&”YES“
是什么意思?如果我错了,但您想将Yes
作为值传递,请更正我?或者甚至可能“是”
(带引号)
如果是第一个,只有单引号内的Yes
就足够了('Yes'
)。对于第二种情况,它将是“\“Yes\”
您的代码仍然存在太多问题。您正在使用&
运算符连接字符串。有些人可能会说使用&
没有问题,但是看看代码,告诉我你的第一个表达式是什么?我的第一句话是:
那看起来很难看
因此,您可以简单地格式化字符串,而不是串联。当然结果是一样的,但是字符串格式看起来更干净、更专业。以下是一个示例:
Dim x as String = "My Name Is {0}."
Dim MyName As String = String.Format(x, "Zack Raiyan")
现在是MsgBox(SQL)
。好吧,我不需要对此进行第二次猜测,您使用这一行来查看您的sql语句是否如预期的那样。如果是这样的话,为什么不设置一个断点呢
现在,让我们谈谈变量声明。为什么要声明一个变量而不使用任何实例初始化它,但稍后,仅仅在几行代码之后,在一开始就可以初始化它的时候呢?样本:
Dim x As New ObjectX
而不是
Dim x As Object
.....
.....
x = New Object()
最后,如果您在阅读所有这些建议时感到沮丧,那么让我们来谈谈罪魁祸首,您的sql语句
insert into approved ( word, approveds)
括号前后的空格可能没有任何区别,但为什么要使用它们呢?您可能是编程新手,但要了解这一点:
您将花费20%的时间编写代码,80%的时间维护代码
因此,始终编写干净、简单且可重用的代码
继续
VALUES ('" & RichTextBox1.SelectedText & "')
不要这样做而是传递参数,然后将值传递给它们。一个简单的例子:
Dim sql = New SqlCommand("Insert Into TableX(Column1)Values(@Column1Val)", MySqlConnection)
sql.Parameters.Add("@Column1Val", SqlDbType.VarChar).Value = "XYZ"
有一条较短的路可以走:
sql.Parameters.AddWithValue("@Column1Val", "XYZ")
但仅当您知道要传递的数据类型与要传递的列相同的值时才使用它
我尽可能多地解释。我希望你能理解自己的错误,也希望你能看到我的答案是如何解决你所遇到的例外情况的。如果您还不清楚,请留下评论,我很乐意提供帮助。只是@zack raiyan代码的一个小补充。这是将关闭和处理连接的Using块。这对于连接对象很重要,因为它们使用非托管代码 我猜想,由于您的错误是数据类型不匹配,因此问题可能出在approveds列上。如果这是一个Yes/No列,那么使用True作为值应该是安全的 检查数据库表中2个参数的数据类型,并适当调整代码
Private Sub AddRecord(pth As String)
Dim SQL = "insert into approved ( word, approveds) VALUES (@word, @approval)"
Using Con As New OleDbConnection("Provider=Microsoft.ace.oledb.12.0; Data Source=" & pth & "\database.mdb; User Id=; Password=;")
Dim Cmd As New OleDbCommand(SQL, Con)
Cmd.Parameters.Add("@word", OleDb.OleDbType.VarChar).Value = RichTextBox1.SelectedText
Cmd.Parameters.Add("@approval", OleDbType.Boolean).Value = True
Con.Open()
Cmd.ExecuteNonQuery()
End Using
End Sub
因此,您被告知SQL代码中存在数据类型不匹配的问题,但您认为提供有关正在使用的数据类型的任何信息都不是一个好主意?我的猜测(我们不必猜测您已经知道的内容)是您的
approveds
列在Access中的类型是Yes/No
。这并不意味着它包含测试“是”或“否”。这样的列包含布尔值,即True
或False
,因此需要插入布尔值。布尔值在SQL中的处理方式与在VB中的处理方式几乎相同。此外,您确实应该学习如何在ADO.NET代码中使用参数。另外,在连接字符串中使用“| DataDirectory |”表示包含数据文件的文件夹。这从来都不是为NET创建SQL的正确方法。花更多的时间在文档上,您将更少地处理errorsDim SQL=New SqlCommand(“插入到已批准(word,approveds)的值(@Column1Val,@Column2Val)”,MySqlConnection)它在语法关键字MySqlConnection
将是Con
。感谢它对我起了作用,但我有一个名为id的自动递增整数字段,它显示了一条消息,要为id字段插入值,我应该在那里放置什么。。。。Cmd.Parameters.Add(“@id”,OleDb.OleDbType.VarChar).Value=null或0不起作用不要将id字段添加到列列表中。您不会为自动递增字段插入值。如果我的答案有帮助,请单击我答案左侧的复选标记(勾选标记)作为答案接受。