2016-10-27 3 views
1

VB.NET을 사용하여 SQL Server 데이터베이스에 여러 값을 추가하려고합니다.SQL Server VB.NET 데이터베이스에 여러 값 추가

시작에
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.SqlServerCe 

, 내가 선언 한 SQL 연결 : 내가 추가 할 수 있도록 해주는 VB 윈도우 폼을 만든

con.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""G:\Program\X\Database1.mdf"";Integrated Security=True" 

나는 다음과 같은 네임 스페이스를 포함했다 질문지에 대한 질문을 편집하고 제거하십시오.

사용자가 "질문 저장"버튼을 클릭하면 질문이 .txt 파일로 저장됩니다.

이 다음 InsertQuestion 서브 루틴을 호출해야합니다

con.Open() 
InsertQuestion(con) 
con.Close() 

InsertQuestion 서브 루틴이 테이블에 데이터를 추가해야합니다

Sub InsertQuestion(ByVal con As SqlConnection) 

    Using con 

    Dim command As New SqlCommand(("INSERT INTO Table VALUES('" & Collection(0).Question & "','" & Collection(0).Answer & "','" & Collection(0).Type & "','" & Collection(0).Mark & "')'"), con)               

     command.ExecuteNonQuery() 

     con.Close() 

    End Using 

End Sub 

. 표에는 ID, 질문, 답변, 유형, 표시라는 다섯 개의 열이 있습니다. ID는 자동 증분으로 설정된 질문 번호입니다.

배열의 첫 번째 요소에서 질문 2의 열에 질문 (0)을 추가하고 질문 3의 열 3에 응답 (0)을 추가해야합니다. 앞으로.

가 microsoft.visualbasic.dll

에서 발생한 'System.InvalidCastException'형식의 처리되지 않은 예외 : 프로그램이 실행되고, 사용자가 오류가 발생, "질문을 저장"을 클릭 그러나

,

추가 정보 : "INSERT INTO QuestionTable VALUES"문자열에 '&'연산자가 정의되어 있지 않고 'RuntimeType'을 입력하십시오.

따라서,이 명령/코드를 수정하여 데이터를 테이블에 추가 할 수있게하는 방법에 대해 조언 해 주시면 감사하겠습니다. 또한

, 나는 ... 인덱스 1 및 요법에서 테이블에

많은 감사를 추가 질문을 추가하는 방법에 대한 갈 것입니다 방법에 대해 설명합니다.

+1

그러나 나는 문제가 놓여 있다고 생각 끝 부분에 아포스트로피가 붙음)''그보다 더 많을 수도 있지만 디버깅을하지 않으면 어렵습니다. – Bugs

+0

질문, 답변, 유형 및 표시 속성에는 어떤 유형이 있습니까? 그 후에'.ToString()'을 사용하면 오류가 해결 될 수도 있습니다. @Scrub – AugustoQ

+1

연결 문자열에 지정하는'.mdf' 파일은 ** 적절한 ** SQL Server 데이터베이스 파일입니다 ** ** SQL Server CE 파일은 아닙니다.sdf') –

답변

1

주석에서 언급했듯이 매개 변수화 된 명령을 작성하면 SQL 문의 오류를 피할 수 있습니다.

또한, 다른 질문에 대답, 트랜잭션을 생성하는 것은 한 번에 데이터베이스 많은 값을 삽입하는 방법이다 : 나는 이런 일에 대한 매개 변수를 사용하는 것이

Sub InsertQuestion(ByVal con As SqlConnection) 

Using con 

    Dim command As New SqlCommand("INSERT INTO Table VALUES(@Question, @Answer, @Type, @Mark)", con)               

    command.Parameters.Add("@Question", YourType) 
    command.Parameters.Add("@Answer", YourType) 
    command.Parameters.Add("@Type", YourType) 
    command.Parameters.Add("@Mark", YourType) 

    command.Transaction = command.Connection.BeginTransaction 

    For i = 0 To Collection.Count - 1 
     command.Parameters("@Question").Value = Collection(i).Question 
     command.Parameters("@Answer").Value = Collection(i).Answer 
     command.Parameters("@Type").Value = Collection(i).Type 
     command.Parameters("@Mark").Value = Collection(i).Mark 
     command.ExecuteNonQuery() 
    Next 

    command.Transaction.Commit() 

    con.Close() 

End Using 

End Sub 
+0

대단히 감사합니다. @AugustoQ. 질문, 답변 및 유형이 다른 문자입니다. 마크는 Int입니다. ("@ Answer", SqlDbType.VarChar, 150) 'command.Parameters.Add ('@ Type ", SqlDbType.VarChar, 150) ('@ Mark ", SqlDbType.Int)' 'command.ExecuteNonQuery()'에서 오류가 발생합니다. – Scrub

+0

** 처리되지 않은 'System.InvalidOperationException'예외 유형이 ' System.Data.dll에서 발생했습니다. 추가 정보 : ExecuteNonQuery는 명령에 지정된 연결이 보류중인 로컬 트랜잭션에있을 때 명령에 트랜잭션이 있어야합니다. 명령의 Transaction 속성이 초기화되지 않았습니다. ** – Scrub

+0

@Scrub 제 대답에 오류가 있습니다. 'Dim Transaction = command.Connection.BeginTransaction'보다는'command.Transaction = command.Connection.BeginTransaction'을 사용하십시오. 미안합니다. 그것에 대해. – AugustoQ