【问题标题】:c# If I pass a parameter in SqlCommand, like operator in sqlcommand doesn't workc#如果我在SqlCommand中传递一个参数,像sqlcommand中的运算符不起作用
【发布时间】:2021-04-12 08:38:53
【问题描述】:

这是我需要执行的查询:

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())
}

所以,调试,当指令 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 并且它工作正常。

我做错了什么?

【问题讨论】:

  • "它去异常"什么异常,你没有在你的问题中添加异常细节。

标签: c# sqlcommand


【解决方案1】:

将字符串作为参数传递时,省略单引号;价值就是内容本身。所以:

Value = "%" + variable + "%"

(引号仅用于文本 SQL 中的 literal 值,因此它知道值的开始和结束位置)

您也只需添加参数:

query.Parameters.Add(search);

(通过使用AddWithValue,您将添加第二个参数@search,其值为第一个参数对象)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多