【发布时间】:2012-09-01 13:38:45
【问题描述】:
让我们首先解决这个问题:我被困在使用 MS Access DB 并且无法更改它。
这很好用:
using (OleDbConnection conn = ConnectionHelper.GetConnection())
{
conn.Open();
var results = conn.Query<string>(
"select FirstName from Students where LastName = @lastName",
new { lastName= "Smith" }
);
conn.Close();
}
这很好用:
using (OleDbConnection conn = ConnectionHelper.GetConnection())
{
OleDbCommand cmd = new OleDbCommand(
"update Students set FirstName = @firstName, City = @city where LastName = @lastName",
conn
);
cmd.Parameters.AddWithValue("firstName", "John");
cmd.Parameters.AddWithValue("city", "SomeCity");
cmd.Parameters.AddWithValue("lastName", "Smith");
conn.Open();
var result = cmd.ExecuteNonQuery();
conn.Close();
}
这不是...它执行时没有错误,但它在数据库中将 FirstName 设置为“SomeCity”,将 City 设置为“John”:
using (OleDbConnection conn = ConnectionHelper.GetConnection())
{
conn.Open();
var results = conn.Query<string>(
"update Students set FirstName = @firstName, City = @city where LastName = @lastName",
new { firstName = "John", city = "SomeCity", lastName = "Smith" }
);
conn.Close();
}
有什么想法吗?
在下面编辑
如果我使用 DynamicParameters,Dapper 可以工作:
using (OleDbConnection conn = ConnectionHelper.GetConnection())
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("firstName", "John");
parameters.Add("city", "SomeCity");
parameters.Add("lastName", "Smith");
conn.Open();
var result = conn.Query<string>(
"update Students set FirstName = @firstName, City = @city where LastName = @lastName",
parameters
);
conn.Close();
}
【问题讨论】:
-
这很奇怪..我需要尝试重现...
-
注意:刚刚尝试使用 sql express 2008 进行复制,它工作正常...
-
@Trev 有趣;我将不得不检查
-
根据对答案here的评论,这不再是当前版本的Dapper的问题。
-
@RobinAtTech - 感谢您的更新。我似乎记得测试了 Dapper 本身的后续版本,并确认它不再按名称对参数进行排序,但那是很久以前的事了,我不能再确定了。我想知道 Dapper-Extensions 是否仍然按名称对参数进行排序,可能是因为它仍然与旧版本的 Dapper 相关联。 (GitHub 上的 Dapper-Extensions 已经两年多没有更新了。)
标签: c# ms-access ado.net oledb dapper