向 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 数据库