仅通过搜索Tests.cs文件,您就可以找到此示例
public void TestProcSupport()
{
var p = new DynamicParameters();
p.Add("a", 11);
p.Add("b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
connection.Execute(@"create proc #TestProc
@a int,
@b int output
as
begin
set @b = 999
select 1111
return @a
end");
connection.Query<int>("#TestProc", p, commandType: CommandType.StoredProcedure).First().IsEqualTo(1111);
p.Get<int>("c").IsEqualTo(11);
p.Get<int>("b").IsEqualTo(999);
}
所以,我想你的C#代码可以这样写
public void InsertData()
{
var p = new DynamicParameters();
p.Add("VAR1", "John");
p.Add("VAR2", "McEnroe");
p.Add("BASEID", 1);
p.Add("NEWID", dbType: DbType.Int32, direction: ParameterDirection.Output);
connection.Query<int>("SP_MYTESTpROC", p, commandType: CommandType.StoredProcedure);
int newID = p.Get<int>("NEWID");
}
顺便提一下,不要使用SP作为存储过程的前缀。它被保留用于系统定义的过程,如果微软决定使用相同的名称,您可能会遇到麻烦。虽然这很不可能,但这是一个不好的习惯,为什么要冒险呢?
sp_
前缀。微软已经将该前缀保留给自己使用(请参阅命名存储过程),而且您可能会在未来遇到名称冲突的风险。 这也会影响您的存储过程性能。最好是避免使用sp_
前缀,改用其他前缀或根本不使用前缀! - marc_sdapper
... 对于那些感兴趣的人,我在这里展示了一个 MySQL / c# Visual Studio 2015 的工作示例 HERE。那种情况涉及到 IN 和OUT
参数。自然地,重点在于OUT
。 - Drew