2016-10-27 115 views
1

我正在嘗試使用VB.NET將多個值添加到SQL Server數據庫。將多個值添加到SQL Server VB.NET數據庫

我已經包括下面的命名空間:

Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.SqlServerCe 

在啓動時,我已經宣佈了SQL連接:

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

我創建了一個VB Windows窗體,允許用戶添加,編輯和刪除問題文件的問題。

當用戶點擊「保存問題」按鈕時,問題被保存爲一個.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是問題的編號,它被設置爲自動遞增。

從數組的第一個元素,應該將索引(0)的問題添加到第2列(在問題下),將索引(0)的答案添加到第3列(在答案下)......等等向前。

然而,當程序運行,並且用戶點擊「保存問題」,出現錯誤:

「」類型的未處理的異常出現在Microsoft.VisualBasic.dll中

附加信息:運算符'&'未定義爲字符串「INSERT INTO QuestionTable VALUES」並鍵入'RuntimeType'。

因此,我將非常感謝關於如何解決此命令/代碼以使數據被添加到表中的建議。

此外,我將如何去從指數1和ECT進一步增加的問題表...

非常感謝。

+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。 問題,答案和答案是Var Char。 Mark是Int。 (「@ Answer」,SqlDbType.VarChar,150) 'command.Parameters.Add(「@ Answer」,SqlDbType.VarChar,150) command.Parameters.Add(「@ Type」,SqlDbType .VarChar,50) command.Parameters.Add(「@ Mark」,SqlDbType.Int)' 但是,在'command.ExecuteNonQuery()' – Scrub

+0

**上發生錯誤未處理的異常類型'System.InvalidOperationException'發生在System.Data.dll中。附加信息:當分配給命令的連接處於未決的本地事務中時,ExecuteNonQuery需要該命令進行事務。該命令的Transaction屬性尚未初始化。** – Scrub

+0

@Scrub在我的回答中有一個錯誤,使用'command.Transaction = command.Connection.BeginTransaction'而不是'Dim Transaction = command.Connection.BeginTransaction',對不起關於那個。 – AugustoQ

相關問題