ASP.NET - 将多个值从文本框传递到Access数据库选择查询

时间:2016-09-29 10:59:43

标签: c# sql asp.net ms-access

我正在制作一个ASP.net网络应用程序,该应用程序允许用户将值粘贴到多行文本框中并按下提交按钮。 点击按钮,这将根据他们输入文本框的产品代码运行数据库查询。

我已经设法在文本框中为一个代码工作了。但是,我正在努力做的是在文本框中允许多个产品代码。 如何在文本框中拆分值,以逗号分隔并在我的ACCESS SQL查询中使用?

以下代码是我在文本框中用于单行的代码,它可以正常工作。

string selectString = "SELECT Patt1, Description, Oversize FROM Item WHERE Patt1 = '" + TextBox1.Text + "'";

基本上,我想要做的是使用相同类型的查询,但如下所示:

string selectString = "SELECT Patt1, Description, Oversize FROM Item WHERE Patt1 sInStatement";

其中sInStatement将是" IN(1234,1235,1236,1237)**这里的代码可以在TextBox1中找到,我需要用逗号等分隔出来。

可以这样做吗?

3 个答案:

答案 0 :(得分:0)

可以这样做,但将用户输入直接传递给SQL查询是个坏主意。

了解SQL injection

最好使用参数。

答案 1 :(得分:0)

您可以修改SQL:

string selectString = "SELECT Patt1, Description, Oversize FROM Item WHERE Patt1 IN ("' + string.Join("','", TextBox1.Text.Replace(" ", "").Split(',')) + "')";

如果值是数字:

string selectString = "SELECT Patt1, Description, Oversize FROM Item WHERE Patt1 IN (" + string.Join(",", TextBox1.Text.Split(',')) + ")";

//or simply:

string selectString = "SELECT Patt1, Description, Oversize FROM Item WHERE Patt1 IN (" + TextBox1.Text + ")";

答案 2 :(得分:0)

考虑一个存储过程,其参数与您希望能够传递的可选参数一样多。对可选参数使用超出范围的默认值,例如-999

以下SQL DDL需要ANSI-92查询模式:

CREATE PROCEDURE GetItemsByPatt1s
( :arg1 INT,
  :arg2 INT = -999,
  :arg3 INT = -999,
  :arg4 INT = -999 ) AS
SELECT Patt1, Description, Oversize
  FROM Item 
 WHERE Patt1 IN ( :arg1, :arg2, :arg3, :arg4 );