在 VS2010 中使用参数插入查询
INSERT Query with Parameters in VS2010
我不明白为什么每当我在 txtParticulars.Text
和 txtPayTo.Text
中包含撇号时,它都没有插入到我的数据库中。
错误是这样的:Syntax error (missing operator) in query expression ''Joy's Boutique','Top's,'Issued')'.
我的文本框值为:
txtPayTo.Text
> 乔伊的精品店
txtParticulars
> 上衣
cmbRemarks.SelectedItem
> 已发行
但是只要我的 txtParticulars
和 txtPayTo
值没有撇号,我的数据就会保存。
以下是我的代码:
sql1 = "INSERT INTO Table1(Check_No,Voucher_No,Issue_Date,Company_Name,Bank_Type,Amount_in_Figure,Amount_in_Words,Payee,Particulars,Remarks) VALUES(@CheckNo,@VoucherNo,@Date,@CompName,@BankType,@AmtInFigure,@AmtInWords,@PayTo,@Particulars,@Remarks)"
Dim cmd1 As OleDbCommand = New OleDbCommand(sql1, myConnection)
cmd1.Parameters.AddWithValue("@CheckNo", txtCheckNo.Text)
cmd1.Parameters.AddWithValue("@VoucherNo", txtVoucherNo.Text)
cmd1.Parameters.AddWithValue("@Date", dtpDate.Text)
cmd1.Parameters.AddWithValue("@CompName", txtCompName.Text)
cmd1.Parameters.AddWithValue("@BankType", txtBankType.Text)
cmd1.Parameters.AddWithValue("@AmtInFigure", txtAmtInFigure.Text)
cmd1.Parameters.AddWithValue("@AmtInWords", txtAmtInWords.Text)
cmd1.Parameters.AddWithValue("@PayTo", txtPayTo.Text)
cmd1.Parameters.AddWithValue("@Particulars", txtParticulars.Text)
cmd1.Parameters.AddWithValue("@Remarks", cmbRemarks.SelectedItem)
cmd1.ExecuteNonQuery()
使用 Add 而不是 AddWithValue
。
后者要根据传入的值来猜测正确的数据库类型
Add
方法更依赖于它(只要你不使用 Add(string, object)
重载)。
根据你的例子:
cmd1.Parameters.Add("@PayTo", SqlDbType.Varchar)
cmd1.Parameters("@PayTo").Value = txtPayTo.Text
或作为一行(感谢 Plutonix):
cmd1.Parameters.Add("@PayTo", SqlDbType.Varchar).Value = txtPayTo.Text
我不明白为什么每当我在 txtParticulars.Text
和 txtPayTo.Text
中包含撇号时,它都没有插入到我的数据库中。
错误是这样的:Syntax error (missing operator) in query expression ''Joy's Boutique','Top's,'Issued')'.
我的文本框值为:
txtPayTo.Text
> 乔伊的精品店
txtParticulars
> 上衣
cmbRemarks.SelectedItem
> 已发行
但是只要我的 txtParticulars
和 txtPayTo
值没有撇号,我的数据就会保存。
以下是我的代码:
sql1 = "INSERT INTO Table1(Check_No,Voucher_No,Issue_Date,Company_Name,Bank_Type,Amount_in_Figure,Amount_in_Words,Payee,Particulars,Remarks) VALUES(@CheckNo,@VoucherNo,@Date,@CompName,@BankType,@AmtInFigure,@AmtInWords,@PayTo,@Particulars,@Remarks)"
Dim cmd1 As OleDbCommand = New OleDbCommand(sql1, myConnection)
cmd1.Parameters.AddWithValue("@CheckNo", txtCheckNo.Text)
cmd1.Parameters.AddWithValue("@VoucherNo", txtVoucherNo.Text)
cmd1.Parameters.AddWithValue("@Date", dtpDate.Text)
cmd1.Parameters.AddWithValue("@CompName", txtCompName.Text)
cmd1.Parameters.AddWithValue("@BankType", txtBankType.Text)
cmd1.Parameters.AddWithValue("@AmtInFigure", txtAmtInFigure.Text)
cmd1.Parameters.AddWithValue("@AmtInWords", txtAmtInWords.Text)
cmd1.Parameters.AddWithValue("@PayTo", txtPayTo.Text)
cmd1.Parameters.AddWithValue("@Particulars", txtParticulars.Text)
cmd1.Parameters.AddWithValue("@Remarks", cmbRemarks.SelectedItem)
cmd1.ExecuteNonQuery()
使用 Add 而不是 AddWithValue
。
后者要根据传入的值来猜测正确的数据库类型
Add
方法更依赖于它(只要你不使用 Add(string, object)
重载)。
根据你的例子:
cmd1.Parameters.Add("@PayTo", SqlDbType.Varchar)
cmd1.Parameters("@PayTo").Value = txtPayTo.Text
或作为一行(感谢 Plutonix):
cmd1.Parameters.Add("@PayTo", SqlDbType.Varchar).Value = txtPayTo.Text