如何对数据库执行插入并使用Dapper返回插入的标识?
我尝试过这样的事情:
string sql = "DECLARE @ID int; " +
"INSERT INTO [MyTable] ([Stuff]) VALUES (@Stuff); " +
"SELECT @ID = SCOPE_IDENTITY()";
var id = connection.Query<int>(sql, new { Stuff = mystuff}).First();
Run Code Online (Sandbox Code Playgroud)
但它没有用.
@Marc Gravell谢谢你的回复.我已经尝试过你的解决方案但是,下面仍有相同的异常跟踪
System.InvalidCastException: Specified cast is not valid
at Dapper.SqlMapper.<QueryInternal>d__a`1.MoveNext() in (snip)\Dapper\SqlMapper.cs:line 610
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in (snip)\Dapper\SqlMapper.cs:line 538
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param) in (snip)\Dapper\SqlMapper.cs:line 456
Run Code Online (Sandbox Code Playgroud) 我刚开始玩Dapper.到目前为止,我喜欢它.小巧玲珑不适用TransactionScope吗?我注意到,即使我从不打电话,TransactionScope.Complete我的更改仍然会提交到数据库.如果现在不支持TransactionScope,是否有任何计划支持它?如果没有那么你必须使用传统的事务管理(System.Transactions.Transaction)?
更新:我刚刚通过Twitter与Sam谈过.它应该工作.我将在明天上午(工作中)更新它的详细信息,看看是否有人可以弄清楚为什么我的更改仍然被提交到数据库,即使我从未调用完成.
使用CssRewriteUrlTransform时,MVC的捆绑在CSS图像中返回错误的URL:
我有一个内联网应用程序,其URL是,例如:http://usid01-srv002/MyApplication.它位于IIS的"默认网站"中.
其中包含以下内容BundleConfig.cs:
bundles.Add(new StyleBundle("~/bundles/jcss")
.Include("~/Scripts/JQueryUI/css/*.css", new CssRewriteUrlTransform())
);
Run Code Online (Sandbox Code Playgroud)
捆绑系统为这些CSS文件中引用的任何图像生成错误的URL,从而产生404甚至JQueryUI经过良好测试的CSS文件(来自FireBug):

例如,它正在产生
http://usid01/path/foo.png
Run Code Online (Sandbox Code Playgroud)
什么时候应该生成:
http://usid01/MyApplication/path/foo.png
Run Code Online (Sandbox Code Playgroud)
如何让捆绑系统生成指向正确位置的URL?
css asp.net-mvc relative-path bundling-and-minification asp.net-mvc-5
我有点诙谐的问题.比如说,我在一个存在主键的表中插入了一些包含一些数据的行.如何"选择"刚刚插入的行的主键?
我应该更具体,并提到我目前正在使用SQLite.
我遇到了一个Oracle问题,到目前为止我无法找到原因.下面的查询适用于Oracle SQL开发人员,但在.NET中运行时会抛出:
ORA-01008:并非所有变量都绑定
我试过了:
SELECT rf.myrow floworder, rf.stage, rf.prss,
rf.pin instnum, rf.prid, r_history.rt, r_history.wt
FROM
(
SELECT sub2.myrow, sub2.stage, sub2.prss, sub2.pin, sub2.prid
FROM (
SELECT sub.myrow, sub.stage, sub.prss, sub.pin,
sub.prid, MAX(sub.target_rn) OVER (ORDER BY sub.myrow) target_row
,sub.hflag
FROM (
WITH floc AS
(
SELECT flow.prss, flow.seq_num
FROM rpf@mydblink flow
WHERE flow.parent_p = :lapp
AND flow.prss IN (
SELECT r_priprc.prss
FROM r_priprc@mydblink r_priprc
WHERE priprc = :lot_priprc
)
AND rownum = 1
)
SELECT …Run Code Online (Sandbox Code Playgroud) 我有一个表有一系列基于时间的事件,每个事件都有一个开始和结束日期.对于最近(当前)事件,结束日期为NULL.我试图折叠重复的行,只显示最早的开始日期和最新的结束日期.如果NULL位于日期字段中,则忽略该行.我可以使用NVL()来设置结束日期值,但这会导致前端逻辑搜索并替换该值.
反正有没有让max()函数将NULL排序为高?
CREATE TABLE CONG_MEMBER_TERM
(
CONG_MEMBER_TERM_ID NUMBER(10) NOT NULL,
CHAMBER_CD VARCHAR2(30 BYTE) NOT NULL,
CONG_MEMBER_ID NUMBER(10) NOT NULL,
STATE_CD CHAR(2 BYTE) NOT NULL,
DISTRICT NUMBER(10),
START_DT TIMESTAMP(6) WITH TIME ZONE,
END_DT TIMESTAMP(6) WITH TIME ZONE
)
Run Code Online (Sandbox Code Playgroud)
此查询有效,但会删除结束日期为NULL的行.
select CONG_MEMBER_ID,
district,
min(start_dt),
max(end_dt)
from CONG_MEMBER_TERM
where CONG_MEMBER_ID = 1716
group by CONG_MEMBER_ID, district;
Run Code Online (Sandbox Code Playgroud)
此查询修复了该问题,但现在我有一个"虚拟"结束日期值(9/9/9999).我宁愿不用编码的东西.
select CONG_MEMBER_ID,
district,
min(start_dt),
max(nvl(end_dt, to_date('9/9/9999', 'mm/dd/yyyy')))
from CONG_MEMBER_TERM
where CONG_MEMBER_ID = 1716
group by CONG_MEMBER_ID, district;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有3个表:audioFormats,videoFormats和fileInfo.我有一个事务,当我插入fileInfo表时,该插入包括来自audioFormats和videoFormats的FK.如果音频格式或视频格式不在这些表中,则插入到后面的表中,然后将生成的(或现有的)ID值插入到fileInfo中.
如何仅在该值不存在时才有效地插入值,但是获取值的ID是否已经存在或仅使用SQL(可能是事务)重新插入.
我可以插入一个值,如果它尚不存在:
INSERT INTO audioformats (audioformat)
VALUES(@format)
WHERE NOT EXISTS (SELECT 1 FROM audioformats WHERE audioformat = @format)
Run Code Online (Sandbox Code Playgroud)
我可以从插入中获取插入的ID:
INSERT INTO audioFormats (audioFormat)
VALUES ('Test')
SET @audioFormatId = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
如果没有插入,SCOPE_IDENTITY将不会给我ID值.我可以执行标量查询以在可能的插入后获取标识,但似乎我应该能够使用最多一个SELECT和INSERT完成所有这些操作.
Web API如何无法反序列化JSON.Net反序列化的对象?

这是Web API控制器:
public void Put(EditorSubmissionMainView ajaxSubmission) {
// ajaxSubmission: EditorSubmissionMainView with all values ('data' also == null)
string json = "{\"id\":\"row_1377\",\"data\":{\"ROTATION\":\"1\",\"EQUIPMENT\":[{\"id\":\"6\"},{\"id\":\"8\"}],\"NOTES\":\"\"}}";
EditorSubmissionMainView foo = Newtonsoft.Json.JsonConvert.DeserializeObject<EditorSubmissionMainView>(json) as EditorSubmissionMainView;
// foo is a EditorSubmissionMainView but properly deserialized.
}
Run Code Online (Sandbox Code Playgroud)
这是由Fiddler捕获并格式化的JSON:
{
"id": "row_1377",
"data": {
"ROTATION": "1",
"EQUIPMENT": [{
"id": "6"
},
{
"id": "8"
}],
"NOTES": ""
}
}
Run Code Online (Sandbox Code Playgroud)
使用JSON.Net但不使用Web API控制器进行序列化的示例类:
[Serializable]
public class EditorSubmissionMainView
{
public string id { get; set; }
public EditorSubmissionMainViewData data { get; set; } …Run Code Online (Sandbox Code Playgroud) 在XCode Organizer中,控制台 - 我可以读取NSLog输出,但不是printf().这是否可以printf()在真实设备上读取结果,就像在模拟器中一样?
我知道我可以使用ParameterDirectionDapper.DynamicParameters:
var parameters = new DynamicParameters();
parameters.Add("iparam", 42);
parameters.Add("oparam", null, DbType.Int32, ParameterDirection.Output);
connection.Execute(sql, parameters);
Run Code Online (Sandbox Code Playgroud)
但是我可以在使用时这样做Dictionary<string, object>吗?
var parameters = new Dictionary<string, object>();
parameters.Add("iparam", 42);
parameters.Add("oparam", /* ??? */ );
connection.Execute(sql, parameters);
Run Code Online (Sandbox Code Playgroud)
或者,我如何迭代a DynamicParameters以获取参数名称和值?
原标题:
可以使用字典添加带有ParameterDirection的Dapper参数吗?
c# ×4
dapper ×3
sql ×3
asp.net-mvc ×2
oracle ×2
sql-server ×2
.net-4.5 ×1
css ×1
data-binding ×1
debugging ×1
insert ×1
iphone ×1
json.net ×1
null ×1
objective-c ×1
ora-01008 ×1
oracle9i ×1
primary-key ×1
printf ×1
row ×1
sqlite ×1