从DbCommand插入EXEC

时间:2015-03-31 22:39:29

标签: c# sql-server

我试图执行将参数带入临时表的存储过程的结果。

// Create #temptable
// ..

using (DbCommand command = connection.CreateCommand())
{
    command.CommandText = "INSERT #temptable EXEC [MystoredProcThatHasParams]";
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add(someObject)
    command.ExecuteNonQuery();
}

输出:

  

找不到存储过程''。

如果我删除command.CommandType = CommandType.StoredProcedure,我会:

  

程序或功能' MystoredProcThatHasParams'期望参数' @ p1'没有提供

是否可以保存从C#中查询参数的存储过程的输出?

1 个答案:

答案 0 :(得分:1)

命令类型StoredProcedure使用特殊的,性能更高的方法连接到SQL Server(RPC调用),这要求命令文本完全存储的名称程序。如果要使用CommandType.StoredProcedure,则不能在命令文本中包含Transact-SQL。

相反,您需要使用CommandType.Text并自己将参数嵌入到SQL字符串中:

cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT #temptable EXEC [MystoredProcThatHasParams] @Param1, @Param2";
cmd.Parameters.Add("@Param1", SqlDbType.Int).Value = 1;
cmd.Parameters.Add("@Param2", SqlDbType.VarChar, 100).Value = "Test";