2012-08-11 7 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

는 무슨 일이 일어날 기대합니까? 배열의 모든 요소를 ​​단일 한 줄의 문자열로 결합하거나, 코마로 구분하거나 한 줄에 하나의 배열 항목이있는 여러 줄의 문자열로 만들겠습니까? –

+0

SQL에 엄청난 수의 레코드를 삽입해야합니까? –

답변

0

일반적으로, 당신은 단지 같은 다중 삽입 명령 행에 하나씩 실행합니다 : SQL Server 2008의에서,

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 

그러나을, 그들은 여기에서 설명하는 새로운 멀티 행 삽입 구문에 대한 지원을 추가 :

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) 
,691,363 (210)
+0

테헤란의 뜨거운 오후부터 도움에 감사드립니다. –

0

그냥 사용

cmd.Parameters.AddWithValue("@text", messageBodies) 
cmd.Parameters.AddWithValue("@id",chkMsgIds) 
cmd.Parameters.AddWithValue("@number", recipientNumbers) 
관련 문제