0

文字列の配列をSQLパラメータとして渡したいのですが、コマンドを実行すると、「オブジェクトはIConvertibleを実装する必要があります」という例外がスローされます。コードは次のとおりです(3つの列はすべて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

通常、次のように、行ごとに1つずつ、複数の挿入コマンドを実行するだけです。

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 に答える