将命令类型从文本更改为存储过程会停止数据读取器运行

本文关键字:数据 读取 运行 存储过程 类型 命令 文本 | 更新日期: 2023-09-27 18:31:42

我有一个在VS2010中构建的C# Web表单项目,我想从使用硬编码的SQL查询转向存储过程来询问我的SQL Server数据库,以便我可以使用参数。

我在使用 sql 数据读取器从数据库中读取数据时遇到困难的代码,并创建了一个逗号分隔的字符串,我使用该字符串使用 jquery 自动完成功能将用于文本框的可用值列表。

这在使用硬编码的sql时工作正常,但是当我尝试将其更改为存储过程并添加参数时,文本框没有可用的值。当我调试它时,我可以看到while (reader.Read())中的代码没有运行。这意味着创建逗号分隔字符串的代码未运行。

使用硬编码的 SQL(这有效)

string mySQLQuery = "SELECT col1 from table1"
using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString))
using (SqlCommand command = new SqlCommand(mySQLQuery, myConnection))
{
    myConnection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            //code to create comma separated string
        }
    }
}

转换为使用存储过程(这不起作用)

using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString))
using (SqlCommand myCommand = new SqlCommand("storedProcedureName", myConnection))
{
    myCommand.CommandType = CommandType.StoredProcedure;
    myCommand.Parameters.Add("@param1", SqlDbType.VarChar).Value = value1;
    myCommand.Parameters.Add("@param2", SqlDbType.VarChar).Value = value2;
    myConnection.Open();
    using (SqlDataReader reader = myCommand.ExecuteReader())
    {
        while (reader.Read())
        {
            //code to create comma separated string
        }
    }
}

任何帮助将不胜感激

将命令类型从文本更改为存储过程会停止数据读取器运行

我认为参数的名称应该没有@,但这取决于数据库。我在MSSQL中使用没有"@"并且它可以工作

我只在 sql 命令中使用 @ 前缀。

"Select * from table where name = @name"

更改此设置:

myCommand.Parameters.Add("@param1", SqlDbType.VarChar).Value = value1;

对此:

myCommand.Parameters.Add("param1", SqlDbType.VarChar).Value = value1;

对于参数2是相同的

我已经

设法解决了这个问题,问题与传递给存储过程的参数值有关,该存储过程包含在我没有包含的代码中。

正在传递给存储过程,但该过程没有返回任何值,这就是为什么它看起来像是跳过了while(myreader.read())行的原因。

代码现在可以正常工作,谢谢大家的帮助。