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

Stu*_*ler 4 c# vb.net sql-server

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

  1. Schema1
  2. SCHEMA2
  3. Schema3

根据对象的功能将对象分离到每个模式中,我认为这是一种很好的做事方式.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
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

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

笔记:

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

Jef*_*ata 10

根据文档,它正在寻找一个名为的存储过程"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);
Run Code Online (Sandbox Code Playgroud)