asc*_*man 5 .net c# sql-server ado.net dapper
我正在使用Dapper.NET,当我执行下一个代码时:
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
con.Execute(@" insert Clients(name) values(@Name)", new {Name = "John"});
con.Close();
}
Run Code Online (Sandbox Code Playgroud)
它执行的查询是下一个:
(@Name nvarchar(4000)) insert Clients(name) values(@Name)
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么Dapper将字符串翻译成nvarchar(4000)?我的意思是......在数据库上,名字字段是nvarchar(50) ......
有人面对这个错误吗?你是如何解决的?你找到了另一个这样的bug吗?
这不是一个错误.Dapper必须为字符串参数选择SQL数据类型,而不查看数据库结构(更不用说解析查询并确定您是否将参数插入特定列).
想象一下,如果你这样做:
insert Clients(name) values(@Name + 'abc')
Run Code Online (Sandbox Code Playgroud)
Dapper是否应该弄清楚@Name最多可以包含47个字符?
如果您愿意,可以更具体地说明参数的大小:
con.Execute(@" insert Clients(name) values(@Name)",
new { Name = new DbString { Value = "John", Length = 50 }});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2372 次 |
| 最近记录: |