存储过程在查询生成器中执行时有效,但不适用于C#代码

时间:2018-07-23 11:36:38

标签: c# stored-procedures

请帮助我。

我想在存储过程中创建动态搜索查询。该代码段遵循我在查询构建器中编写并运行的查询,但是在C#代码中使用时无法运行

我的表名是info,有3列,分别是id intname 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)

enter image description here

2 个答案:

答案 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)

最后,问题解决了,解决方法如下:  在查询的输入参数足够的情况下,将输入参数的值设置为空

我希望帮助别人