2015-08-23 57 views
0

好吧,我已經拿起了我所知道的VB.Net的一切,從試驗和錯誤。我已經構建了一個可以在Access中工作的SQL字符串,並試圖實現它,但是它似乎不適用於我的程序。我完全接受我沒有堅定的把握,所以我做錯了什麼?這種特殊的形式只需要從Windows窗體中的文本框中獲取文本並將其插入到數據庫中。VB.Net SQL插入到使用Windows窗體數據

Dim insertSql As String = "INSERT INTO StudentTable VALUES ('" + BadgeNoTextBox.Text + "','" + FirstNameTextBox.Text + "','" + LastNameTextBox.Text + "','" + SAPSIDTextBox.Text + "','" + EmailTextBox.Text + "'.'" + PhoneTextBox.Text + "','" + CollegeComboBox.Text + "')" 
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""C:\Users\larsennicholasg\Documents\Visual Studio 2012\Projects\SSCLogin\SSCLogin\My Project\SSCStudent.mdb""" 
    Dim da As New OleDbDataAdapter(insertSql, conn) 

    If (da.Update(ds)) Then 
     MessageBox.Show("Success") 
    Else 
     MessageBox.Show("Fail") 
    End If 

任何想法?

+0

作爲一個方面說明,我很樂意看看書籍或一個很好的Vb.net - > sql引用網站,我看了,但似乎無法解決一個一致的問題。 – Skathix

+1

你忘了執行你的查詢'da.ExecuteNonQuery();' – sqluser

+0

看看這個使用參數來代替http://stackoverflow.com/questions/21961951/inserting-ms-access-row-into-database-using- vb-net – sqluser

回答

3

試試這個:

Dim insertSql As String = "INSERT INTO StudentTable VALUES (?, ?, ?, ?, ?, ?, ?)" 
Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""C:\Users\larsennicholasg\Documents\Visual Studio 2012\Projects\SSCLogin\SSCLogin\My Project\SSCStudent.mdb""" 
Using conn As New OleDbConnection(connStr), _ 
     cmd As New OleDbCommand(insertSql, conn) 

    ''# I had to guess at types and lengths here. 
    ''# Adjust this to use actual types and lengths in your database 
    cmd.Parameters.Add("?", OleDbType.Integer).Value = CInt(BadgeNoTextBox.Text) 
    cmd.Parameters.Add("?", OleDbType.VarWChar, 20).Value = FirstNameTextBox.Text 
    cmd.Parameters.Add("?", OleDbType.VarWChar, 20).Value = LastNameTextBox.Text 
    cmd.Parameters.Add("?", OleDbType.Integer).Value = CInt(SAPSIDTextBox.Text) 
    cmd.Parameters.Add("?", OleDbType.VarWChar, 50).Value = EmailTextBox.Text 
    cmd.Parameters.Add("?", OleDbType.VarChar, 20).Value = PhoneTextBox.Text 
    cmd.Parameters.Add("?", OleDbType.VarWChar, 35).Value = CollegeComboBox.Text 

    conn.Open() 
    cmd.ExecuteNonQuery() 
End Using 

使用的查詢參數,而不是字符串替換是很重要的。你有什麼瘋狂的 - 容易受到SQL注入攻擊。

+0

?是變量名?他們是爲了什麼? – Skathix

+0

它們只是查詢參數的佔位符。某些提供程序使用命名參數並將該值與查詢中的參數按名稱匹配,但OleDb按照它們在查詢和Parameters集合中出現的順序將該參數與佔位符進行匹配,因此您只需使用'?'。 –

+0

我是否需要一個用於表中的每個參數? (第一列是自動編號值) – Skathix

相關問題