Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database vb.net ms access mdb表格插入记录代码无效_Database_Vb.net_Ms Access - Fatal编程技术网

Database vb.net 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

我想将数据插入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.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)它在语法关键字下方显示红色下划线,带有消息严重性代码描述项目文件行抑制状态错误BC30109'MySqlConnection'是类类型,不能用作表达式。WindowsApplication1f:\our programming work\拼写检查器\WindowsApplication1\WindowsApplication1\Form1。vb 2597处于活动状态你能把完整的代码插入记录吗?这会有帮助的me@fahad,在您的情况下,
MySqlConnection
将是
Con
。感谢它对我起了作用,但我有一个名为id的自动递增整数字段,它显示了一条消息,要为id字段插入值,我应该在那里放置什么。。。。Cmd.Parameters.Add(“@id”,OleDb.OleDbType.VarChar).Value=null或0不起作用不要将id字段添加到列列表中。您不会为自动递增字段插入值。如果我的答案有帮助,请单击我答案左侧的复选标记(勾选标记)作为答案接受。