2013-10-20 81 views
3

我正在使用Dapper更新並插入Access數據庫。代碼工作時不會拋出異常,但它不會更新數據庫中的值。以下是我的代碼微軟與MS Access更新並插入問題

sql.Append("UPDATE drugs_repository SET drug_name = @DrugName "); 

sql.Append(" WHERE id = @DrugId"); 

var parameters = new 
{ 
    DrugName = objDrug.DrugName,       
    DrugId = objDrug.DrugId 
}; 
var t = connection.Query<string>(sql.ToString(), parameters); 

有人能讓我知道我在上面的代碼中缺少什麼嗎? 當我硬編碼比在數據庫中更新的值。所以可能它與參數有關。

+1

得到了問題。在Dapper的SqlMapper.cs文件中,我從「// IEnumerable props = type.GetProperties()」中刪除了orderby,其中(p => p.GetIndexParameters()。Length == 0).OrderBy(p => p。名稱);」。現在工作很好。不確定刪除orderby是否會有任何影響。建議將不勝感激。 – techknackblogs

+1

+1做得好!因爲'@DrugName'>'@ DrugId'''.OrderBy'交換了參數的順序,並且Access.OLEDB要求按照它們出現在SQL CommandText中的順序創建參數。 –

回答

2

如果您對在Dapper代碼中刪除.OrderBy()可能產生的副作用感到緊張,那麼一種解決方法是爲參數命名,以便它們按照它們出現在SQL命令中的順序進行排序。例如,我懷疑如果參數名爲@1DrugName@2DrugId,未修改的Dapper代碼可能工作正常。

+0

感謝您的想法。我實際上使用的是舊版本的Dapper。在最新版本中它已經修復。無論如何感謝您的答覆。 techknackblogs.com – techknackblogs

+0

我認爲這個問題依然存在,除非訂單保持不變http://stackoverflow.com/questions/39339478/dapper-with-access-update-statement-partially-not-working – RobinAtTech