找不到存储过程(使用模式)

时间:2011-11-29 00:00:06

标签: c# sql-server vb.net

在我的数据库中,我有三个模式:

  1. Schema1
  2. SCHEMA2
  3. Schema3
  4. 根据对象的功能将对象分离到每个模式中,我认为这是一种很好的做事方式。这反过来在dbo中不会留下任何对象,除了我未修改的model数据库中的默认对象。

    当我尝试从代码引用存储过程时,在指定存储过程时,我收到Stored Procedure Not Found错误。当我将CommandType更改回文本时,代码会起作用。

    我没有代码,但它看起来像这样(写在我的头顶,所以不要指望它编译):

    using(DbConnection conn as new DbConnection("Conn String")
    {
         using(DbCommand cmd = conn.CreateCommand())
         {
             cmd.CommandText = "Schema1.usp_Category_MySproc @param1,@param2";
             cmd.CommandType = CommandType.StoredProcedure;
             conn.Open();
             DbDataReader rdr = cmd.ExecuteQuery();
             while(rdr.Read())
             {
                  // DO STUFF
             }
         }
    }
    

    我还注意到参数必须按顺序传递,否则它们都被交换(因为我只能使用CommandType.Normal我没有使用其他命令类型测试参数)。我猜测参数传递的顺序无关紧要,只要传入每个参数?

    有什么想法吗?

    与往常一样,c#或vb中的答案都可以接受。

    备注:

    1. .Net 3.5在Windows 7企业版
    2. 是的,我使用的是DbCommand而不是SqlCommand
    3. 目标Sql-Server 2005-> 2012

3 个答案:

答案 0 :(得分:10)

根据documentation,它正在寻找名为"Schema1.usp_Category_MySproc @param1,@param2"的存储过程,当然,它不存在。

  

将CommandType设置为StoredProcedure时,应将CommandText属性设置为存储过程的名称。

我能够使用以下代码为命令添加参数:

cmd.CommandText = "Schema1.usp_Test";
cmd.CommandType = CommandType.StoredProcedure;

var parameter = cmd.CreateParameter();

parameter.ParameterName = "@value";
parameter.DbType = DbType.Int32;
parameter.Value = 100;

cmd.Parameters.Add(parameter);

答案 1 :(得分:4)

我认为您正在尝试执行数据库中已存在的命令? 如果是这样,最好还是使用以下格式添加StoredProc并使用它来添加参数...

string sqlCommand = "schema1.StoredProcName";    
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
db.AddInParameter(dbCommand, "@Param1", DbType.Int32, 1);
db.AddInParameter(dbCommand, "@Param2", DbType.Int32, 2);
db.ExecuteNonQuery(dbCommand); 

查看处理参数:http://msdn.microsoft.com/en-us/library/ff649451.aspx

答案 2 :(得分:3)

如果您使用的是StoredProcedure命令类型,则不应在命令文本中指定参数名称。看起来应该更像这样:

     cmd.CommandText = "Schema1.usp_Category_MySproc";