解決方法を知らない問題があります。 同じ操作で同じクエリを実行できるようにするには、そのクエリで追加する必要がある値を保持する辞書を作成しました。私は私がDBに格納するすべてのデータが含まれている辞書を持って言ったようにC# - 辞書からクエリするパラメータを追加する
INSERT INTO [dbo].[TestDB] ([ID], [Name], [Age]) VALUES (@{0}, @{1}, @{2});
:
クエリは、このようなものです。文字列ビルダーを使用して、私は辞書にキーとして値を持つクエリを作成します。例:
INSERT INTO [dbo].[TestDB] ([ID], [Name], [Age]) VALUES (@1, @2, @3);
INSERT INTO [dbo].[TestDB] ([ID], [Name], [Age]) VALUES (@4, @5, @6);
INSERT INTO [dbo].[TestDB] ([ID], [Name], [Age]) VALUES (@7, @8, @9);
ここで、値を使用してキーを変更する場合、クエリは変更されません。 これは私がそれを行うために使用していますものです:
LPARAMETERSは辞書ですlCommand.Parameters.AddRange(lParameters.Select(x => new SqlParameter(string.Format("@"+x.Key.ToString()), x.Value)).ToArray());
。
いいですか?
編集: [OK]を、私は文字列ビルダ、クエリを実行しているコードを作成するコードを追加します。 ここでは、すべての挿入クエリを含む文字列ビルダを作成します。
int lCurrentIndex = 0;
foreach (var litem in inCollection)
{
inSqlBuilder.AppendLine(string.Format(SQL.Insert, lPageCurrentIndex + 1, lPageCurrentIndex + 2, lPageCurrentIndex + 3));
Guid TemplateIdentifier = new Guid();
inDictionary.Add(lPageCurrentIndex + 1, ID);
inDictionary.Add(lPageCurrentIndex + 2, Name);
inDictionary.Add(lPageCurrentIndex + 3, Age);
lPageCurrentIndex += 3;
}
クエリが作成された後、私はこれを行うには方法に来ています:
using (var lCommand = lConnection.CreateCommand())
{
lCommand.Transaction = lTransaction;
lCommand.CommandTimeout = 300;
lCommand.CommandText = SqlBuilder.ToString();
lCommand.Parameters.AddRange(lParameters.Select(x => new SqlParameter($"@x.Key", x.Value)).ToArray());
if(SqlBuilder.Length>0)
await lCommand.ExecuteNonQueryAsync();
}
であれば、単一引用符を置くことを忘れないでくださいあなたの辞書を教えてください。 – grmbl
@grmbl辞書は次のように定義されています:var lParameters = new Dictionary()、必要な情報がすべて含まれています:生成されるキーは1,2,3,4,5 ...です。 :ID、名前、年齢、ID、名前、年齢。例えば。 {1,1}、{2、 "Peter"}、{3、22}など –
あなたのテーブルは実際に** TestDB **という名前ですか、これは誤字ですか?また、現在のC#でstring.formatを使用する必要はありません。代わりに '$" @ {x.Key} "'を実行することができます – Innat3