【发布时间】:2016-12-07 08:51:06
【问题描述】:
我有一个问题,我不知道如何解决它。 我希望能够在相同的操作中运行相同的查询,在这种情况下,我创建了一个字典,其中包含需要在查询中添加的值。
查询是这样的:
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);
现在,当我想用值更改键时,查询不会被修改。 这就是我正在使用的:
lCommand.Parameters.AddRange(lParameters.Select(x => new SqlParameter(string.Format("@"+x.Key.ToString()), x.Value)).ToArray());
其中 lParameters 是字典。
祝你好运!
编辑: 好的,我将添加创建字符串生成器的代码和执行查询的代码。 在这里,我创建了包含所有插入查询的字符串构建器。
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 Dictionary 的定义如下: var lParameters = new Dictionary
() 并包含我需要的所有信息:生成的键是:1,2,3,4 ,5... 值按顺序排列:ID、姓名、年龄、ID、姓名、年龄。例如。 {1, 1}, {2, "Peter"}, {3, 22} 等 -
您的表实际上是否命名为 TestDB 或者这是一个错字?另外,使用当前的 C# 不需要使用 string.format,您可以改为使用
$"@{x.Key}" -
你没看到你在这里缺少年龄吗...?
-
您能否向我们展示您已经拥有的代码,因为您试图做的事情让我感到困惑......您如何匹配您的字典垂直选择的查询的参数数量?