c# 如果我在 SqlCommand 中传递一个参数,就像 sqlcommand 中的运算符不起作用
c# If I pass a parameter in SqlCommand, like operator in sqlcommand doesn't work
这是我需要执行的查询:
SELECT COUNT(*) FROM Faq WHERE IdApplicazione = @IdApp AND (TestoDomanda LIKE '%search%' OR TestoRisposta LIKE '%@search%')
我正在尝试使用 SqlCommand 在 C# 中执行它。所以我做的是:
query = new SqlCommand("SELECT COUNT(*) FROM Faq WHERE IdApp = @IdApp " +
"AND (TestoDomanda LIKE @search OR TestoRisposta LIKE @search) ");
query.Parameters.AddWithValue("@Id", dataApp);
string variable = "test";
SqlParameter search = new SqlParameter("@search", SqlDbType.NVarChar, 255)
{
Value = "'%" + variable + "%'"
};
query.Parameters.AddWithValue("@search", search);
SqlConnection sqlConnection = new SqlConnection(GetConnectionString(DB_NEWS, USERID_DBNEWS, PASS_DBNEWS, INITIALCATALOG_DBNEWS));
sqlConnection.Open();
query.Connection = sqlConnection;
int count = 0;
try
{
using SqlDataReader reader = query.ExecuteReader();
if (reader.Read())
{
count = reader.GetInt32(0);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString())
}
所以,调试,when 在指令上 if (reader.Read()) 它进入异常..我假设查询没有返回记录。
我也尝试过:
query = new SqlCommand("SELECT COUNT(*) FROM Faq WHERE IdApp = @IdApp " +
"AND (TestoDomanda LIKE '%@search%' OR TestoRisposta LIKE '%@search'% ) ");
但还是一样,reader.read()
异常。
如果我将@search 的值更改为“%test%”:
query = new SqlCommand("SELECT COUNT(*) FROM Faq WHERE IdApp = @IdApp " +
"AND (TestoDomanda LIKE '%test%' OR TestoRisposta LIKE '%test'% ) ");
query.Parameters.AddWithValue("@Id", dataApp);
有效。所以我认为这是 '%%' 运算符的问题,因为我只尝试使用 @idApp 并且它工作正常。
我做错了什么?
将字符串作为参数传递时,省略单引号;价值是内容本身。所以:
Value = "%" + variable + "%"
(引号仅用于文本 SQL 中的 文字 值,因此它知道值的开始和结束位置)
您也只需添加参数:
query.Parameters.Add(search);
(通过使用 AddWithValue
,您将添加名为 @search
的第二个参数,其值是第一个参数对象)
这是我需要执行的查询:
SELECT COUNT(*) FROM Faq WHERE IdApplicazione = @IdApp AND (TestoDomanda LIKE '%search%' OR TestoRisposta LIKE '%@search%')
我正在尝试使用 SqlCommand 在 C# 中执行它。所以我做的是:
query = new SqlCommand("SELECT COUNT(*) FROM Faq WHERE IdApp = @IdApp " +
"AND (TestoDomanda LIKE @search OR TestoRisposta LIKE @search) ");
query.Parameters.AddWithValue("@Id", dataApp);
string variable = "test";
SqlParameter search = new SqlParameter("@search", SqlDbType.NVarChar, 255)
{
Value = "'%" + variable + "%'"
};
query.Parameters.AddWithValue("@search", search);
SqlConnection sqlConnection = new SqlConnection(GetConnectionString(DB_NEWS, USERID_DBNEWS, PASS_DBNEWS, INITIALCATALOG_DBNEWS));
sqlConnection.Open();
query.Connection = sqlConnection;
int count = 0;
try
{
using SqlDataReader reader = query.ExecuteReader();
if (reader.Read())
{
count = reader.GetInt32(0);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString())
}
所以,调试,when 在指令上 if (reader.Read()) 它进入异常..我假设查询没有返回记录。
我也尝试过:
query = new SqlCommand("SELECT COUNT(*) FROM Faq WHERE IdApp = @IdApp " +
"AND (TestoDomanda LIKE '%@search%' OR TestoRisposta LIKE '%@search'% ) ");
但还是一样,reader.read()
异常。
如果我将@search 的值更改为“%test%”:
query = new SqlCommand("SELECT COUNT(*) FROM Faq WHERE IdApp = @IdApp " +
"AND (TestoDomanda LIKE '%test%' OR TestoRisposta LIKE '%test'% ) ");
query.Parameters.AddWithValue("@Id", dataApp);
有效。所以我认为这是 '%%' 运算符的问题,因为我只尝试使用 @idApp 并且它工作正常。
我做错了什么?
将字符串作为参数传递时,省略单引号;价值是内容本身。所以:
Value = "%" + variable + "%"
(引号仅用于文本 SQL 中的 文字 值,因此它知道值的开始和结束位置)
您也只需添加参数:
query.Parameters.Add(search);
(通过使用 AddWithValue
,您将添加名为 @search
的第二个参数,其值是第一个参数对象)