2015-03-25 34 views
-1

我收到以下錯誤:未爲'String'和'System.Windows.Forms.TextBox'類型定義運算符'&'。 :VB 2012錯誤消息

在下面的代碼行

cmd.CommandText = "INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) VALUES (" & Me.adduseridtxtbox & ",'" & Me.addpasswordtxt & ",'" & Me.addfirstnametxt & ",'" & Me.addlastnametxt & ",'" & Me.jobcbox & ",'" & Me.addssntxt & "')" 

這裏是代碼:

Private Sub addbtn_Click(sender As Object, e As EventArgs) Handles addbtn.Click 
    Dim cmd As New OleDbCommand 
    If Not connection.State = ConnectionState.Open Then 
     connection.Open() 
    End If 
    cmd.Connection = connection 
    ' add data to table 
    cmd.CommandText = "INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) VALUES (" & Me.adduseridtxtbox & ",'" & Me.addpasswordtxt & ",'" & Me.addfirstnametxt & ",'" & Me.addlastnametxt & ",'" & Me.jobcbox & ",'" & Me.addssntxt & "')" 

    cmd.ExecuteNonQuery() 
    'refresh data in list 
    'close connection 
    connection.Close() 
End Sub 
+2

它告訴你一個TextBox不是一個字符串,你需要使用TextBox的Text Property。即。 'Me.addpasswordtxt.Text' – 2015-03-25 02:54:07

+2

'TextBox'不是一個字符串,所以你不能像它那樣連接它。使用'TextBox.Text'屬性。 – 2015-03-25 03:04:26

+0

兩個非常好的答案,其中一個包含您在代碼中使用的代碼。您應該接受該答案(單擊複選標記)將其從未答覆的列表中移除,並顯示您參與該過程。 – Plutonix 2015-03-25 16:41:12

回答

0

你必須使用Me.adduseridtxtbox.Text(其中獲取TextBox的值),而不是TextBox直接。

另外,請,請閱讀OleDbParameter以及如何使用這些參數OleDbCommand,以防止注射。微軟甚至提供了例子。

如果您讓用戶自己填寫此表格,那麼當前您的代碼非常危險,因爲他們可以完全控制數據庫。無論如何,使用OleDbParameter是一個很好的練習。您似乎在這裏處理社會安全號碼 - 您的用戶應享有某種形式的安全。

+0

感謝您的信息......將極大地幫助我...至於ssn ...他們是虛構的...但我會做出調整你(所有)的建議。 – 2015-03-25 03:42:38

0

您應該嘗試在查詢中使用/聲明參數。 例如:

cmd.CommandText = ("INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) " & _ 
        "VALUES (@uid, @pw, @fn, @ln, @job, @ssn)") 
With cmd.Parameters 
.Clear() 
.AddWithValue("uid", adduseridtxtbox.Text) 
.AddWithValue("uid", adduseridtxtbox.Text) 
.AddWithValue("pw", addpasswordtxt.Text 
.AddWithValue("fn", addfirstnametxt.Text) 
.AddWithValue("ln", addlastnametxt.Text) 
.AddWithValue("job",jobcbox.SelectedValue) 
.AddWithValue("ssn", addssntxt.Text) 
End With 
cmd.ExecuteNonQuery() 
+0

另外,如果數據庫中的用戶表具有自動生成的號碼,該怎麼辦?這是否需要考慮到代碼?如果是這樣如何? – 2015-03-25 03:45:05

+0

如果其中一列是自動生成的號碼,則不需要在查詢中包含該號碼。 – Chi 2015-03-25 03:56:53

0

您的SQL語句不正確。你如何使用一個對象作爲一個字符串?它應該是 cmd.CommandText = "INSERT INTO users(userid, passWord, firstName, lastName, jobTitle, SSN) VALUES ('" & Me.adduseridtxtbox.Text & ",'" & Me.addpasswordtxt.Text & ",'" & Me.addfirstnametxt.Text & ",'" & Me.addlastnametxt.Text & ",'" & Me.jobcbox.Text & ",'" & Me.addssntxt.Text & "')"

使用參數化查詢來防止SQL注入並使惡意用戶的數據庫系統安全。