変数をどのように保存したかわからないため、:を使用してサンプルデータを使用した完全で可能な実装を示しますList<Dictionary<String, Object>>()
。
サンプルデータを追加します。
var tableName = "Users";
var records = new List<Dictionary<String, Object>>();
var recordFields = new Dictionary<String, Object>();
recordFields.Add("id", 1);
recordFields.Add("name", "Alice");
recordFields.Add("country", "France");
records.Add(recordFields);
recordFields = new Dictionary<String, Object>();
recordFields.Add("id", 2);
recordFields.Add("name", "Bob");
recordFields.Add("country", "Austria");
records.Add(recordFields);
recordFields = new Dictionary<String, Object>();
recordFields.Add("id", 3);
recordFields.Add("name", "Carol");
recordFields.Add("country", "Germany");
records.Add(recordFields);
パラメータ化された挿入ステートメントを生成します。
using (var con = new SqlConnection(Settings.Default.ConnectionString))
{
con.Open();
foreach (var record in records)
{
String insertSql = String.Format("INSERT INTO {0} ({1}) VALUES ({2});"
, tableName
, String.Join(",", record.Select(r => r.Key))
, String.Join(",", record.Select(r => "@" + r.Key)));
using (var insertCommand = new SqlCommand(insertSql, con))
{
foreach (var field in record)
{
var param = new SqlParameter("@" + field.Key, field.Value);
insertCommand.Parameters.Add(param);
}
insertCommand.ExecuteNonQuery();
}
}
}
これは実際にはテストされていないことに注意してください(コンパイルして見栄えがします)が、とにかく役立つはずです。
編集:
@Oded:問題は、ダニエルが挿入を実行したくないが、それらを表示/出力/保存したいということだと思います。したがって、生成されたSQLが表示されないため、SqlCommandパラメーターを使用することは適切ではありません。
@Cylindricその通りです
それは不可能であり、矛盾します。withを使用することはできませString
んSqlParameters
。したがって、後でこれらの挿入を実行する場合は、SQLインジェクションを使用できます。実際にstatemenetsを実行しているときは、上記のコードを使用することをお勧めします。