2013-02-05 139 views
2

我目前有一個Linq to Sql實現需要花費很長時間來完成插入操作,所以我試圖用一個簡潔的插入語句加速它,但仍然使用linq到sql的execute命令。LinqToSql動態插入

我有一個string[],我試圖通過ExecuteCommand的object[] parameters參數像這樣。

string sqlStart = "INSERT INTO BusinessContacts (Guid,BusinessId,Name,Email,Address,City,State,PostalCode,Phone,URL) VALUES "; 
string sqlParams = "(NewId(),1,{{{0}}},{{{1}}},{{{2}}},{{{3}}},{{{4}}},{{{5}}},{{{6}}},{{{7}}}),"; 
string[] values = new string[8000]; 
int curParam = -1; 
sbSqlValues.Append(sqlStart); 
foreach (var email in emails) { 
    sbSqlValues.AppendFormat(sqlParams, ++curParam, ++curParam, ++curParam, ++curParam, ++curParam, ++curParam, ++curParam, ++curParam); 
    curParam -= 8; 
    values[++curParam] = email.Name; 
    values[++curParam] = (email.Email); 
    values[++curParam] = (email.Address); 
    values[++curParam] = (email.City); 
    values[++curParam] = (email.State); 
    values[++curParam] = (email.PostalCode); 
    values[++curParam] = (email.Phone); 
    values[++curParam] = (email.URL); 
} 
sbSqlValues.Remove(sbSqlValues.Length - 1, 1); 
inserted += ExecuteCommand(sbSqlValues.ToString(), values); 

但即使我傳遞一個字符串數組,我不斷收到異常:A query parameter cannot be of type 'System.Object'.

回答

0

嘗試:(object[])values作爲第二個參數。 C#編譯器將string[]轉換爲單元素params

+0

更新爲'ExecuteCommand(sbSqlValues.ToString(),(object [])values);',仍然引發相同的異常。 –

+0

好的,那麼請顯示您執行的SQL以及ExecuteCommand的內容。提供我們需要的所有信息。 – usr

+0

我更新了代碼。 –