하나의 데이터베이스를 다른 데이터베이스로 변환하는 응용 프로그램이 있으며 사용하는 함수 중 하나가 아래의 insert_Note입니다. 이 응용 프로그램은 새로운 데이터베이스에 다른 데이터를 삽입하는 다중 스레드를 가지고 있습니다. 아래의 코드는 24에서 120 사이의 여러 삽입에 대해 작동하지만 오류로 인해 실패합니다.INSERT에 열 수가 적습니다. 응답이 아닙니다.
VALUES 절에 지정된 값보다 INSERT 문의 열 수가 적습니다. VALUES 절의 값 수는 INSERT 문에 지정된 열 수와 일치해야합니다.
코드를 보면 삽입이 아닌 일부 코드에서만 코드가 작동하기 때문에 문제가 될 수 있습니다. 멀티 스레드 응용 프로그램에서이 오류가 발생할 수있는 원인은 무엇입니까? 내가 3 일을 보냈고 어떤 곳도 얻지 못했기 때문에 어떤 아이디어라도 환영받을 것이다!
*Public sub insert_Note
Dim sql As String
Dim cmd As New SqlClient.SqlCommand
sql = "INSERT INTO notes ("
sql &= "RefID,"
sql &= "TypeID,"
sql &= "DateEntered,"
sql &= "Username,"
sql &= "Subject,"
sql &= "Body,"
sql &= "DoNotSendToWeb,"
sql &= "Deleted,"
sql &= "SubTypeID"
sql &= ") VALUES ("
sql &= "@RefID,"
sql &= "@TypeID,"
sql &= "@DateEntered,"
sql &= "@Username,"
sql &= "@Subject,"
sql &= "@Body,"
sql &= "@DoNotSendToWeb,"
sql &= "@Deleted,"
sql &= "@SubTypeID"
sql &= ")"
cmd.CommandText = sql
cmd.Parameters.AddWithValue("@RefID", 0)
cmd.Parameters.AddWithValue("@TypeID", 0)
cmd.Parameters.AddWithValue("@DateEntered", DBNull.Value)
cmd.Parameters.AddWithValue("@Username", DBNull.Value)
cmd.Parameters.AddWithValue("@Subject", DBNull.Value)
cmd.Parameters.AddWithValue("@Body", DBNull.Value)
cmd.Parameters.AddWithValue("@DoNotSendToWeb", DBNull.Value)
cmd.Parameters.AddWithValue("@Deleted", DBNull.Value)
cmd.Parameters.AddWithValue("@SubTypeID", DBNull.Value)
Using DotNetdatabase As New DBAccessLayer.DBAccessLayer(VBDotNetConn)
Try
Dim ds As DataSet
ds = DotNetdatabase.OpenDataSetWithoutErrorMsg(cmd)
Return (0)
Catch ex As Exception
AddToErrorLog(ex.Message, "Adding Note")
Throw ex
End Try
End Using
End Function
public class DBAccessLayer
private myConnection as SqlConnection
Public Sub New(ByVal strConnectionString As String)
myConnection = New SqlConnection(strConnectionString)
End Sub
Public Function OpenDataSetWithoutErrorMsg(ByVal myCommand As SqlCommand) As DataSet
Dim MyDataSet As New DataSet
Dim myDataAdapter As SqlDataAdapter
Try
Dim blnInitiallyOpen As Boolean = True
myConnection.Open()
Do Until myConnection.State = ConnectionState.Open
Threading.Thread.Sleep(100)
Loop
myCommand.CommandTimeout = 0
myCommand.Connection = myConnection
myDataAdapter = New SqlDataAdapter(myCommand)
myDataAdapter.Fill(MyDataSet)
myConnection.Close()
Return MyDataSet
Catch e As Exception
If myConnection.State = ConnectionState.Open Then
myConnection.Close()
End If
Throw e
Return Nothing
End Try
End Function
end class*
감사합니다,
휴 knowlege은 우리가 그들을 해결할 수는 무지없는 문제를 야기 할 수 있습니다.
아이작 아시모프 (Isaac Asimov)
어디에서 오류가 발생합니까? 'VB' 오류 스택 추적을 게시 할 수 있습니까? – Quassnoi
@ 휴 : ID 열이 있습니까? –
그리고 항상 테이블에 동일한 값을 삽입했음을 확인할 수 있습니까? (모두 0, DBNULL은 코드 당 정확히 동일합니다)? 즉 param 값이 실제로 다른 곳에서 나온 것이 아닙니다 – AdaTheDev