向 SQL Server VB.NET 数据库添加多个值

Posted

技术标签:

【中文标题】向 SQL Server VB.NET 数据库添加多个值【英文标题】:Add multiple values to a SQL Server VB.NET Database 【发布时间】:2016-10-27 14:59:28 【问题描述】:

我正在尝试使用 VB.NET 向 SQL Server 数据库添加多个值。

我已包含以下命名空间:

Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlServerCe

在启动时,我已经声明了 SQL 连接:

con.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""G:\Program\X\Database1.mdf"";Integrated Security=True"

我创建了一个 VB Windows 窗体,使用户能够为试卷添加、编辑和删除问题。

当用户单击“保存问题”按钮时,问题将保存为 .txt 文件。

这应该调用InsertQuestion 子例程:

 con.Open()
 InsertQuestion(con)
 con.Close()

InsertQuestion子程序:

Sub InsertQuestion(ByVal con As SqlConnection)

    Using con

    Dim command As New SqlCommand(("INSERT INTO Table VALUES('" & Collection(0).Question & "','" & Collection(0).Answer & "','" & Collection(0).Type & "','" & Collection(0).Mark & "')'"), con)                                                         

        command.ExecuteNonQuery()

        con.Close()

    End Using

End Sub

这应该将此数据添加到表中。该表有五列 - ID、问题、答案、类型、标记。 ID 是问题的编号,设置为自动递增。

从数组的第一个元素开始,索引 (0) 中的问题应该添加到第 2 列(在问题下),索引(0)中的答案应该添加到第 3 列(答案下)......等等.

但是,当程序运行时,用户点击“保存问题”,就会出现错误:

Microsoft.VisualBasic.dll 中出现“System.InvalidCastException”类型的未处理异常

附加信息:未为字符串“INSERT INTO QuestionTable VALUES”和类型“RuntimeType”定义运算符“&”。

因此,我非常感谢有关如何修复此命令/代码以将数据添加到表中的建议。

此外,我将如何从索引 1 等向表中添加更多问题...

非常感谢。

【问题讨论】:

我会为这种工作使用参数,但我认为问题可能在于末尾的尾随撇号)' 可能不止于此,但如果不进行调试就很难。跨度> 您的 Question、Answer、Type 和 Mark 属性有哪些类型?如果您之后使用.ToString(),我可能会解决该错误。 @Scrub 您在连接字符串中指定的.mdf 文件是正确 SQL Server 数据库文件 - 不是 SQL Server CE 文件(那些是.sdf) 【参考方案1】:

在cmets中提到,创建参数化命令可以避免SQL语句出错。

另外,回答您的其他问题,创建事务是一次向数据库插入多个值的一种方式:

Sub InsertQuestion(ByVal con As SqlConnection)

Using con

    Dim command As New SqlCommand("INSERT INTO Table VALUES(@Question, @Answer, @Type, @Mark)", con)                                                         

    command.Parameters.Add("@Question", YourType)
    command.Parameters.Add("@Answer", YourType)
    command.Parameters.Add("@Type", YourType)
    command.Parameters.Add("@Mark", YourType)

    command.Transaction = command.Connection.BeginTransaction

    For i = 0 To Collection.Count - 1
        command.Parameters("@Question").Value = Collection(i).Question
        command.Parameters("@Answer").Value = Collection(i).Answer
        command.Parameters("@Type").Value = Collection(i).Type
        command.Parameters("@Mark").Value = Collection(i).Mark
        command.ExecuteNonQuery()
    Next

    command.Transaction.Commit()

    con.Close()

End Using

End Sub

【讨论】:

非常感谢@AugustoQ。问题、答案和类型是 Var Char。马克是诠释。 'command.Parameters.Add("@Question", SqlDbType.VarChar, 150) command.Parameters.Add("@Answer", SqlDbType.VarChar, 150) command.Parameters.Add("@Type", SqlDbType.VarChar, 50) command.Parameters.Add("@Mark", SqlDbType.Int)' 但是在'command.ExecuteNonQuery()'出现错误 System.Data.dll 中发生了“System.InvalidOperationException”类型的未处理异常。附加信息:当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求该命令具有事务。该命令的 Transaction 属性尚未初始化。 @Scrub 我的回答有误,请使用command.Transaction = command.Connection.BeginTransaction 而不是Dim Transaction = command.Connection.BeginTransaction,对此感到抱歉。

以上是关于向 SQL Server VB.NET 数据库添加多个值的主要内容,如果未能解决你的问题,请参考以下文章

在VB.net中,连接SQL Server数据库的连接字符串的问题。

已经添加了具有相同键 TREEVIEW vb.net 和 sql server 的项目

VB6/Microsoft Access/DAO 到 VB.NET/SQL Server... 有建议吗?

通过 vb.net 将日期插入 SQL Server 数据库

VB.NET 不在 sql server 2008 express 中创建数据库

在 vb.net 中备份 SQL Server localdb