我想用dapper在一个“run”中做一个简单的INSERT-and-then-SELECT-it-query,大致如下:
var query = "INSERT INTO Table(Id, Value) Values(1, :value);" +
"SELECT Id, Value FROM Table WHERE Id = 1;"
Connection.Query<Item>(query, new { value = value});
这只是给了我ORA-00933: SQL command not properly ended
。如果我在Oracle SQL Developer中运行完全相同的查询(在“一次运行”中,手动替换了params),它运行正常。
如果我将其分成两部分,并执行此操作:
var insert = "INSERT INTO Table(Id, Value) Values(1, :value);"
var select = "SELECT Id, Value FROM Table WHERE Id = 1;"
Connection.Execute(insert, new { value = value});
var item = Connection.Query<Item>(select);
......它运作正常。我已经尝试删除最后一个分号(在其他问题中似乎是 thing ),没有运气。
我在另一个使用SQL Server的项目中成功完成了同样的事情。
使用Dapper 1.42。
有人能看到这里有什么问题吗?
答案 0 :(得分:1)
试试这个。在Insert中添加“返回子句”并声明输出参数。
var param = new DynamicParameters();
param.Add(name: "IinsValue", value: value, direction: ParameterDirection.Input);
param.Add(name: "Id", dbType: DbType.Int32, direction: ParameterDirection.Output);
param.Add(name: "Value", dbType: DbType.String, direction: ParameterDirection.Output);
Connection.Execute("INSERT INTO Table(Id, Value) Values(1, :value) returning Id,Values into :id, :value", param );
var Id = param.get<int>("Id");
var Val = param.get<String>("Value");