我试图通过C#,ADO.NET执行存储过程,下面是我试图执行的代码:
using (SqlConnection conn = new SqlConnection(".;Initial Catalog=MyDB;User ID=sa;Password=***"))
{
try
{
string cmdText = "dbo.sp_Create_FlaggedItemEntry @URI, @ID";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
conn.Open();
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@URI", value1);
cmd.Parameters.AddWithValue("@ID", value2);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
现在,当我尝试调试它时,我遇到了错误 - cmd.ExecuteNonQuery();
- "无法找到存储过程dbo.sp_Create_FlaggedItemEntry"
我验证了连接字符串是正确的并且存在存储过程。
此外,如果我将行 - cmd.CommandType = CommandType.StoredProcedure;
更改为cmd.CommandType = CommandType.Text;它按预期成功执行。
有人可以提出我所遗漏的内容并在这里做错了 - 请原谅我这是非常基本的事情因为我上次使用ADO.NET已经很久了
答案 0 :(得分:14)
CommandType.StoredProcedure
表示CommandText
只应包含存储过程的名称。
从字符串中删除参数名称。
答案 1 :(得分:1)
从命令文本中取出参数。此外,您无需指定dbo。
它使用CommandType.Text
的原因是因为它是一个合法的SQL命令 - 如果你打开SSMS并在其中输入,只要你也创建变量@URI和@ ID
答案 2 :(得分:0)
您应该在connectionString中提及数据源/服务器。同样对于CommandText @Slaks是正确的。