将命令类型从文本更改为存储过程会停止数据读取器运行
本文关键字:数据 读取 运行 存储过程 类型 命令 文本 | 更新日期: 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())
行的原因。
代码现在可以正常工作,谢谢大家的帮助。