C#网站调用spGetSoore存储过程提示找不到的问题求助
问题原因分析
- C#调用逻辑错误:你在代码里错误地把完整的
EXEC spGetSoore @IdSoore = @IdSoore当成存储过程名称传给了SqlCommand,但SQL Server只会查找名称完全匹配的存储过程,自然找不到。正确的做法是要么指定命令类型为存储过程,只传存储过程名;要么把EXEC语句作为普通SQL文本执行。 - SSMS红色下划线是缓存问题:SQL Server Management Studio里的红色下划线提示找不到存储过程,只是IntelliSense缓存没更新,实际存储过程存在,所以能正常执行,刷新缓存就能解决。
解决办法
方式一:标准存储过程调用(推荐)
这是调用存储过程的规范写法,代码示例:
using (SqlConnection conn = new SqlConnection("你的数据库连接字符串")) { conn.Open(); using (SqlCommand cmd = new SqlCommand("spGetSoore", conn)) { // 关键:设置命令类型为存储过程 cmd.CommandType = CommandType.StoredProcedure; // 添加存储过程需要的参数 cmd.Parameters.Add("@IdSoore", SqlDbType.Int).Value = 你的Id参数值; using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { // 处理查询结果 } } } }
方式二:以SQL文本形式执行EXEC语句
如果坚持用EXEC语句,要把它当成普通SQL文本执行,代码示例:
using (SqlConnection conn = new SqlConnection("你的数据库连接字符串")) { conn.Open(); // 写完整的EXEC语句,注意参数名不要重复冲突 using (SqlCommand cmd = new SqlCommand("EXEC spGetSoore @IdSoore = @InputId", conn)) { cmd.CommandType = CommandType.Text; // 绑定参数到语句里的@InputId cmd.Parameters.Add("@InputId", SqlDbType.Int).Value = 你的Id参数值; using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { // 处理查询结果 } } } }
解决SSMS红色下划线问题
在SQL Server Management Studio里按下Ctrl+Shift+R,刷新IntelliSense本地缓存,红色下划线就会消失。
内容的提问来源于stack exchange,提问作者Zahra
相关产品推荐
相关产品推荐

