我有一个在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
}
}
}
非常感谢任何帮助
答案 0 :(得分:0)
我认为param的名称应该没有@但它取决于数据库。我没有使用“@”来使用MSSQL而且它可以工作
我只在sql命令中使用@前缀。
"Select * from table where name = @name"
改变这个:
myCommand.Parameters.Add("@param1", SqlDbType.VarChar).Value = value1;
到此:
myCommand.Parameters.Add("param1", SqlDbType.VarChar).Value = value1;
for param2是相同的
答案 1 :(得分:0)
我已经成功解决了这个问题,问题在于传递给存储过程的参数值,这些参数包含在我没有包含的代码中。
这些值正在传递给存储过程但是该过程没有返回任何值,这就是为什么它似乎被跳过了while(myreader.read())
行。
现在代码工作正常,感谢大家的帮助。