C#ADO.NET - 无法找到存储过程

时间:2014-09-07 13:58:22

标签: c# ado.net

我试图通过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已经很久了

3 个答案:

答案 0 :(得分:14)

CommandType.StoredProcedure表示CommandText只应包含存储过程的名称。

从字符串中删除参数名称。

答案 1 :(得分:1)

从命令文本中取出参数。此外,您无需指定dbo。

它使用CommandType.Text的原因是因为它是一个合法的SQL命令 - 如果你打开SSMS并在其中输入,只要你也创建变量@URI和@ ID

Documentation here

答案 2 :(得分:0)

您应该在connectionString中提及数据源/服务器。同样对于CommandText @Slaks是正确的。