データベースに多数の行を挿入するために使用している次のコードがあります。
_conn.Open();
SqlCommand command = new SqlCommand(_insert[0].ToString(), _conn);
command.Parameters.AddRange((_insert[1] as List<SqlParameter>).ToArray());
Int32 rowsAffected = command.ExecuteNonQuery();
_conn.Close();
コマンド (_insert[1].ToString()) は次のとおりです。
"INSERT INTO Candidate (id, name) VALUES ({0},{1}),({2},{3}),({4},{5}),({6},{7}),
({8},{9}),({10},{11}),({12},{13}),({14},{15}),({16},{17}),({18},{19}),({20},{21}),
({22},{23}),({24},{25}),({26},{27}),({28},{29}),({30},{31}),({32},{33}),({34},{35}),
({36},{37}),({38},{39})"
コマンドパラメータは次のようになります(VSデバッグから):
[0] - ParameterName = "0", SqlDbType = BigInt, Value = 21400
[1] - ParameterName = "1", SqlDbType = NVarChar, Value = "Dan Smith"
[2] - ParameterName = "2", SqlDbType = BigInt, Value = 21401
[3] - ParameterName = "3", SqlDbType = NVarChar, Value = "Doug Smith"
[4] - ParameterName = "4", SqlDbType = BigInt, Value = 21402
[5] - ParameterName = "5", SqlDbType = NVarChar, Value = "Danielle Smith"
私が得ているエラーは、「'0' 付近の構文が正しくありません」です。誰かがこれを引き起こしていることを教えてもらえますか?
ここで重要な場合は、パラメーター配列を作成する場所です (API から返された JSON を反復処理する別の関数):
foreach (KeyValuePair<string, object> _attribute in _field)
{
// '_score' is an attribute included with each entity when doing a search
// indicating the matching score of the query, we don't want this in the database
if (_attribute.Key.ToString() != "_score")
{
_insertQuery.AppendFormat("{{{0}}},", _paramNumber);
_paramValues.Add(new SqlParameter(_paramNumber.ToString(), _attribute.Value));
_paramNumber++;
}
}
return new object[] {_insertQuery.ToString(), _paramValues };
API からさまざまなオブジェクトを取得し、ローカル データベースに挿入しているので、これを行っています。これらのオブジェクトごとにクラスを作成することはできません (要件は、これをジェネリックにすることです)。
更新:
_paramNumber の先頭に「@」を追加するようにコードを更新したため、各パラメーターは @0、@1 などになり、次のエラーが発生しています。
"Incorrect syntax near '@0'."
挿入ステートメントは次のとおりです。
"INSERT INTO Candidate (id, name) VALUES ({@0},{@1}),({@2},{@3}),({@4},{@5}),({@6},{@7}),
({@8},{@9}),({@10},{@11}),({@12},{@13}),({@14},{@15}),({@16},{@17}),({@18},{@19}),
({@20},{@21}),({@22},{@23}),({@24},{@25}),({@26},{@27}),({@28},{@29}),({@30},{@31}),
({@32},{@33}),({@34},{@35}),({@36},{@37}),({@38},{@39})"
パラメータは次のようになります。
[0] - ParameterName = "@0", SqlDbType = BigInt, Value = 21400
[1] - ParameterName = "@1", SqlDbType = NVarChar, Value = "Dan Smith"
[2] - ParameterName = "@2", SqlDbType = BigInt, Value = 21401
[3] - ParameterName = "@3", SqlDbType = NVarChar, Value = "Doug Smith"
[4] - ParameterName = "@4", SqlDbType = BigInt, Value = 21402
[5] - ParameterName = "@5", SqlDbType = NVarChar, Value = "Danielle Smith"