请帮助我。
我想在存储过程中创建动态搜索查询。该代码段遵循我在查询构建器中编写并运行的查询,但是在C#代码中使用时无法运行
我的表名是info
,有3列,分别是id int
,name nvarchar(50)
,family nvarchar(50)
。
SELECT Id, [name ], family, description
FROM info
WHERE (@n IS NULL) AND (@f IS NULL) OR
(@n IS NULL) AND (family = @f) OR
([name ] = @n) AND (@f IS NULL) OR
([name ] = @n) AND (family = @f)
答案 0 :(得分:1)
我在下面写了一个相当通用的模板,关于如何从存储过程中读取数据。您只需要添加连接字符串和过程名称即可。
using (var conn = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand("ProcedureName", conn) {
CommandType = CommandType.StoredProcedure })
{
conn.Open();
cmd.Parameters.Add(new SqlParameter("@f", variableOfF ?? DbNull.Value);
cmd.Parameters.Add(new SqlParameter("@n", variableOfN ?? DbNull.Value);
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
int id = Convert.ToInt32(reader["id"]);
string name = reader["name"].ToString();
string family = reader["family"].ToString();
string description = reader["description"].ToString();
// do whatever you need to with the variables
}
}
}
}
答案 1 :(得分:0)
最后,问题解决了,解决方法如下: 在查询的输入参数足够的情况下,将输入参数的值设置为空
我希望帮助别人