2

現在、挿入に非常に長い時間がかかるLinq to Sqlの実装があるため、コンパクトな挿入ステートメントを使用して高速化しようとしていますが、それでもlinq to sqlの実行コマンドを使用しています。

私はExecuteCommand のパラメーターにそのようstring[]に渡そうとしています。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'.

4

1 に答える 1

0

(object[])values2 番目のパラメーターとして: を試してください。C# コンパイラはstring[]、 を one-element に変換しますparams

于 2013-02-05T16:56:59.847 に答える