我想實作這樣的功能: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)”
如何解決?
uj5u.com熱心網友回復:
string sy作為key每次都是一樣的,當然哈希表會拋出錯誤。其實你的需求跟哈希表沒有關系。用錯資料容器了。
用類似List<MyCommand>就可以了,MyCommand也可以是Tuple<string, List<DbParameter>>等等。
struct MyCommand
{
public string Cmd;
public List<DbParameter> Parameters;
}
uj5u.com熱心網友回復:
你的key明顯是相同的,這個時候不應該用哈希表來存盤,只要需要唯一值判定的集合都不可以的。如: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的框架下才支持
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/107524.html
標籤:ASP.NET
