0

在我的程序中,我需要从数据库中获取值,因此使用 texbox 以便客户端键入任何内容,我可以从数据库中搜索。

我的代码是

 SqlCommand sqlcmd = sqlcon.CreateCommand();
 sqlcmd.CommandText = "Select distinct transactionName from dbo.tbl where terminalId = " + textBox_cardNumber.Text;

以上不是我的完整代码,但在我的代码中,我使用的是 textbox_cardNumber ...

我想用引号''

它应该像

Select distinct transactionName from dbo.tbl where terminalId = '0097'

所以我的问题是如何获得报价???

4

6 回答 6

6

使用这样的参数化查询

SqlCommand sqlcmd = sqlcon.CreateCommand();
sqlcmd.CommandText = "Select distinct transactionName from dbo.tbl " + 
                     "where terminalId = @id";

sqlCmd.Parameters.AddWithValue("@id",  textBox_cardNumber.Text);
....

通过这种方式,您将识别数据(文本框文本)作为字符串的工作推迟到知道如何正确引用您的值的框架代码。您还消除了Sql 注入攻击 的可能性

于 2013-08-28T12:22:44.947 回答
4
  "'" + textBox_cardNumber.Text + "'";

我希望我能理解你!

于 2013-08-28T12:25:14.627 回答
1

你也可以试试这个,但这不是很好的做法,总是使用参数。

sqlcmd.CommandText = "Select distinct transactionName from dbo.tbl where terminalId = '" + textBox_cardNumber.Text +"'";
于 2013-08-28T12:23:56.333 回答
1

你可以试试这段代码:

SqlCommand sqlcmd = sqlcon.CreateCommand();
sqlcmd.CommandText = "Select distinct transactionName from dbo.tbl where terminalId = '"
+  textBox_cardNumber.Text+"'";
于 2013-08-28T12:28:43.670 回答
0

可以 使用参数化 sql而不是字符串连接。因为这种代码对SQL 注入攻击是开放的。

SqlCommand sqlcmd = sqlcon.CreateCommand();
sqlcmd.CommandText = "SELECT DISTINCT transactionName FROM dbo.tbl
                      WHERE terminalId = @terminalID";

sqlcmd.Parameters.AddWithValue("@terminalID", textBox_cardNumber.Text);

附注,看看SQL 注入攻击的例子

于 2013-08-28T12:23:54.513 回答
0

您需要使用使用参数的准备好的语句。

否则,您需要在输入字符串周围添加引号,但它会让您打开 SQL 注入

于 2013-08-28T12:24:06.870 回答