2012-08-11 92 views
0

我想将字符串数组作为SQL参数传递,但是当我执行该命令时,它会抛出一个异常,指出“对象必须实现IConvertible”。这里是代码(所有三列是nvarchar的):无法将SQL参数值设置为字符串数组

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 

我创造了这个程序中插入的记录大量到数据库中,什么是正确的做法?

+0

你预期会发生什么?你是否希望将数组的所有元素合并为一个单独的行字符串,或者用逗号分隔,还是将其制作为每行含有一个数组项的多行字符串? – 2012-08-11 11:12:15

+0

我应该如何插入大量的记录到sql? – 2012-08-11 11:19:26

回答

0

通常情况下,你只需执行多个INSERT命令,每行一个,如:

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) 
+0

感谢您在德黑兰炎热的下午提供帮助。 – 2012-08-11 11:47:59

0

只是使用:

cmd.Parameters.AddWithValue("@text", messageBodies) 
cmd.Parameters.AddWithValue("@id",chkMsgIds) 
cmd.Parameters.AddWithValue("@number", recipientNumbers) 
相关问题