簡體   English   中英

實體框架ExecuteSqlCommand批量更新

[英]Entity Framework ExecuteSqlCommand bulk update

出於性能原因,我試圖使用實體框架ExecuteSqlCommand批量更新數據。 ctx.Database.ExecuteSqlCommand(updateQuery, new object[] {newValue} );

但是,我在設置表的值字段時遇到了麻煩。 它應該將現有值乘以一個因子,但是我收到以下錯誤:

附加信息:將數據類型nvarchar轉換為數字時出錯。

newValue = "Value * 56,25";    
String updateQuery = @"UPDATE dbo.BudgetLine_type1_unpivoted set Value = {0} where valueTypeID='Value2' AND Dim2 in ('712','718','722') AND Dim4 = '110' AND Period = 1"
int noRowsAffected = db.Database.ExecuteSqlCommand(updateQuery, new object[] {newValue} );

將newValue設置為“ 1”或僅將“ Value”(不進行任何更改)設置時,效果很好

我應該如何進行乘法? 值字段的類型為小數(28,6)

將參數傳遞給ExecuteSqlCommand行為與string.Format ,因此您的{0}占位符不正確-您需要在此處設置SQL參數。

如果要始終將“ Value乘以一定的數量,則該數量會發生變化,因此這是您需要傳遞的參數。 您只需要根據查詢是否是乘法來調整查詢,即set Value = Value * @p0set Value = @p0 我假設您的代碼必須知道要設置的值以及是否要乘。

我會這樣寫,類似於MSDN中的描述示例:

decimal newValue = 56.25;
bool multiply = true;

String newValueSql = multiply ? "Value * @p0" : "@p0";
String updateQuery = @"UPDATE dbo.BudgetLine_type1_unpivoted set Value = " + newValueSql
    + " where valueTypeID='Value2' AND Dim2 in ('712','718','722') AND Dim4 = '110' AND Period = 1"

int noRowsAffected = db.Database.ExecuteSqlCommand(updateQuery, newValue);

運行查詢時, @p0將替換為newValue的值,並且將是十進制值,因此計算有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM