我想实现这样的功能:asp.net页面上有个按钮,点击后能使用事务处理自动插入多条数据库记录。我使用参数化语句,代码如下:Hashtable ht = new Hashtable(); //创建一个Hashtable实例
for (int i = 0; i < Month; i++)
{
string sy = "insert into ht_ysk(htbh,ysrq,ysje,czy,addtime) values(@htbh,@ysrq,@ysje,@czy,@addtime)";
var pay = new List<DbParameter>()
{
du.CreateDbParameter("@htbh",_htbh),
du.CreateDbParameter("@ysrq",d1.AddMonths(i)),
du.CreateDbParameter("@ysje",_yzj),
du.CreateDbParameter("@czy",_czy),
du.CreateDbParameter("@addtime",DateTime.Now)
};
ht.Add(sy, pay);
}
string cjg = du.ExecuteSqlTran(ht);
if (cjg == "ok")
{
Response.Write("<script>alert('批量添加成功!');location.href ='ht_ysk_list.aspx?id=" + _htbh + "';</script>");
Response.End();
}
else
{
Response.Write("<script>alert('执行失败。" + cjg + "');location.href ='ht_ysk_list.aspx?id=" + _htbh + "';</script>");
Response.End();
}
执行后报告错误:已添加项。字典中的关键字:“insert into ht_ysk(htbh,ysrq,ysje,czy,addtime) values(@htbh,@ysrq,@ysje,@czy,@addtime)”所添加的关键字:“insert into ht_ysk(htbh,ysrq,ysje,czy,addtime) values(@htbh,@ysrq,@ysje,@czy,@addtime)”如何解决?
for (int i = 0; i < Month; i++)
{
string sy = "insert into ht_ysk(htbh,ysrq,ysje,czy,addtime) values(@htbh,@ysrq,@ysje,@czy,@addtime)";
var pay = new List<DbParameter>()
{
du.CreateDbParameter("@htbh",_htbh),
du.CreateDbParameter("@ysrq",d1.AddMonths(i)),
du.CreateDbParameter("@ysje",_yzj),
du.CreateDbParameter("@czy",_czy),
du.CreateDbParameter("@addtime",DateTime.Now)
};
ht.Add(sy, pay);
}
string cjg = du.ExecuteSqlTran(ht);
if (cjg == "ok")
{
Response.Write("<script>alert('批量添加成功!');location.href ='ht_ysk_list.aspx?id=" + _htbh + "';</script>");
Response.End();
}
else
{
Response.Write("<script>alert('执行失败。" + cjg + "');location.href ='ht_ysk_list.aspx?id=" + _htbh + "';</script>");
Response.End();
}
执行后报告错误:已添加项。字典中的关键字:“insert into ht_ysk(htbh,ysrq,ysje,czy,addtime) values(@htbh,@ysrq,@ysje,@czy,@addtime)”所添加的关键字:“insert into ht_ysk(htbh,ysrq,ysje,czy,addtime) values(@htbh,@ysrq,@ysje,@czy,@addtime)”如何解决?
其实你的需求跟哈希表没有关系。用错数据容器了。
用类似List<MyCommand>就可以了,MyCommand也可以是Tuple<string, List<DbParameter>>等等。
struct MyCommand
{
public string Cmd;
public List<DbParameter> Parameters;
}
Dictionary;HashMap。不过你可以这样写,将你这块代码封装成对象
string sy = "insert into ht_ysk(htbh,ysrq,ysje,czy,addtime) values(@htbh,@ysrq,@ysje,@czy,@addtime)";
var pay = new List<DbParameter>()
{
du.CreateDbParameter("@htbh",_htbh),
du.CreateDbParameter("@ysrq",d1.AddMonths(i)),
du.CreateDbParameter("@ysje",_yzj),
du.CreateDbParameter("@czy",_czy),
du.CreateDbParameter("@addtime",DateTime.Now)
};
然后存储到List<T>里面。
或者你使用楼上所说的Tuple,不过这个Tuple必须是.NET 4.0的框架下才支持