0

我想传递一个字符串数组作为 SQL 参数,但是当我执行命令时,它会抛出一个异常,上面写着“对象必须实现 IConvertible”。这是代码(所有三列都是nvarchar):

Public Sub sendsms(messageBodies As String(), ByVal recipientNumbers As String(), Optional ByVal chkMsgIds As string() = Nothing) 
    Dim con As New SqlConnection
    con.ConnectionString = connection.Sms
    Dim cmd As New SqlCommand("insert into sentmessage (text,id,number) values (@text,@id,@number)", con)
    cmd.Parameters.Add("@text", Data.SqlDbType.NVarChar, n).Value = messageBodies 
    cmd.Parameters.Add("@id", Data.SqlDbType.NVarChar, n).Value = chkMsgIds
    cmd.Parameters.Add("@number", Data.SqlDbType.NVarChar, n).Value = recipientNumbers
    con.Open()
    cmd.ExecuteNonQuery()
    con.Close()
    cmd.Dispose()
End Sub

我创建了这个例程来将大量记录插入数据库,正确的方法是什么?

4

2 回答 2

0

通常,您只需执行多个插入命令,每行一个,例如:

Public Sub sendsms(messageBodies As String(), ByVal recipientNumbers As String(), Optional ByVal chkMsgIds As string() = Nothing) 
    Using con As New SqlConnection()
        con.ConnectionString = connection.Sms
        con.Open()
        For Each body As String In messageBodies
            Using cmd As New SqlCommand("insert into sentmessage (text,id,number) values (@text,@id,@number)", con)
                cmd.Parameters.Add("@text", Data.SqlDbType.NVarChar, n).Value = body
                cmd.Parameters.Add("@id", Data.SqlDbType.NVarChar, n).Value = chkMsgIds
                cmd.Parameters.Add("@number", Data.SqlDbType.NVarChar, n).Value = recipientNumbers
                cmd.ExecuteNonQuery()
            End Using
        Next
    End Using
End Sub

但是,在 SQL Server 2008 中,他们添加了对新的多行插入语法的支持,此处对此进行了说明:

http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row-constructor/

例如,您可以执行如下命令:

insert into sentmessage (text,id,number) values 
('First',1,1),
('Second',2,2),
('Third',3,3)
于 2012-08-11T11:29:39.583 回答
0

只需使用:

cmd.Parameters.AddWithValue("@text", messageBodies )
cmd.Parameters.AddWithValue("@id",chkMsgIds)
cmd.Parameters.AddWithValue("@number", recipientNumbers)
于 2012-08-11T11:42:04.950 回答