使查询适配参数和"like"函数。

21 浏览
0 Comments

使查询适配参数和"like"函数。

我看到了很多关于在Sql查询中使用参数和"like"的问题,但我已经尝试了我看到的每一种编码方式,仍然无法让我的查询结果显示出来。如果我在查询本身中放入一个值,它就可以正常运行。当我运行列出的第一个查询时,我会得到错误信息"必须声明标量变量"@Search",但我以为我已经通过cmd.Parameters.AddWithValue语句声明了它。有人能看出我可能做错了什么吗?非常感谢任何帮助。

//声明连接对象

SqlConnection Conn = new SqlConnection();

Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

//连接到数据库

Conn.Open();

//定义查询

//这个查询不起作用

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '%' + @Search + '%')";

//这个查询也不起作用

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE @Search";

//这个查询起作用

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE 'MI'";

//声明命令

SqlCommand cmd = new SqlCommand(sql, Conn);

//添加SQL查询所需的参数

cmd.Parameters.AddWithValue("@Search", "%" + txtSearch.Text + "%");

//声明一个SQL适配器

SqlDataAdapter da = new SqlDataAdapter(sql, Conn);

//声明一个数据表

DataTable dt = new DataTable();

//填充数据表

da.Fill(dt);

//绑定ListView

lv.DataSource = dt;

lv.DataBind();

dt.Dispose();

da.Dispose();

Conn.Close();

0
0 Comments

问题的出现原因是在参数化查询中使用了"like"语句,但是参数的添加方式不正确。解决方法是正确添加参数并修改查询语句。

在上述代码中,我们可以看到在查询语句中使用了"like"语句来模糊匹配State字段的值。然而,在添加参数时,使用了错误的方式。正确的添加参数的方式应该是使用参数名称来指定参数的值。

解决问题的方法是修改代码如下:

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '%' + @searchValue + '%')";
cmd.Parameters.AddWithValue("@searchValue",txtSearch.Text);

通过以上修改,我们将查询语句中的参数名称改为"@searchValue",并将参数的值设置为txtSearch.Text。这样就可以正确传递参数并进行模糊匹配查询了。

这样,我们就解决了"Getting query to work with parameter and 'like'"的问题。通过修改参数的添加方式并调整查询语句,我们可以正确地使用参数化查询和"like"语句实现模糊匹配。

0
0 Comments

问题的原因是使用了错误的构造函数SqlDataAdapter da = new SqlDataAdapter(sql, Conn);,导致没有使用构建好的命令。因此,也没有使用参数,只有不使用参数的查询才有效(第三个查询)。解决方法是使用正确的构造函数SqlDataAdapter da = new SqlDataAdapter(cmd);

在更改所使用的构造函数后,可以使用以下查询之一:

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE ";
...
cmd.Parameters.AddWithValue("", "%" + txtSearch.Text + "%");

或者:

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE '%' +  + '%'";
...
cmd.Parameters.AddWithValue("", txtSearch.Text);

没有在字符串中使用+符号是导致问题的原因。

0
0 Comments

问题:如何使查询语句与参数和“like”一起工作?

在上面的代码中,您没有在SqlDataAdapter中使用参数。在下面的代码中,您将在命令中使用SqlDataAdapter。

//这个查询不起作用
string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE )";
//声明命令
SqlCommand cmd = new SqlCommand(sql, Conn);
//添加SQL查询所需的参数
cmd.Parameters.AddWithValue("", "%" + txtSearch.Text + "%"); 
//声明SQL适配器
SqlDataAdapter da = new SqlDataAdapter();
sa.SelectCommand = cmd

如果您不想使用参数化查询,可以使用以下代码:

//声明连接对象
//这个查询不起作用
string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '%" + txtSearch.Text + "%')";
//声明SQL适配器
SqlDataAdapter da = new SqlDataAdapter(sql, conn);

尝试了以下代码:

string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '% +  + %')";
cmd.Parameters.AddWithValue("", txtSearch.Text);

仍然没有结果。请问一下,如果我使用Update Panel是否会有所不同?我今天才开始使用它,并且正在学习。不过,我放入值的查询工作正常。

更新面板不应该有任何影响。如果您正在使用命令的方法,请在查询中添加通配符,并将select语句更改为:

SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE )

不想打击你的兴致,但是我只看到您的代码和OP的代码之间有一个不同之处,即您对SqlCommand对象使用了不同的构造函数重载,而原始的重载应该仍然有效。

我没有看到您所说的。OP的代码问题在于SqlDataAdapter使用了sql字符串而没有声明参数。

您的代码太多了,很难看出您的意思。您是否可以只包含需要更改的行的代码示例?

这是主要的不同之处。SqlDataAdapter da = new SqlDataAdapter(); sa.SelectCommand = cmd。这样可以使SqlDataAdapter使用带有参数的cmd。

是的,改用SqlDataAdapter就行了!我不得不说,我有一阵子有点混淆,但是我想我明白你所说的未调用正确的cmd。无法理解为什么带有值的查询可以工作,但其他查询不能。谢谢。

0