2008-11-22 58 views
4

我想構建一個C#.net程序,它像AS400上的RPG子文件一樣工作。AS400 C#.net插入新記錄問題

使一般子文件部分工作。我可以顯示並編輯和更新現有記錄。

在我試圖插入新記錄的代碼中爆炸了。吹上

cmd.ExecuteNonQuery();

如果你想看看它是如何工作沒有插入到

http://144.162.90.78/thomas/

看那Website1a

這裏是代碼。

using IBM.Data.DB2.iSeries; 
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

public partial class WebForm3 : System.Web.UI.Page 
{ 
    protected void btnBack_Click(object sender, EventArgs e) 
    { 
     Server.Transfer("WebForm1a.aspx"); 
    } 
    protected void btnUpdate_Click(object sender, EventArgs e) 
    { 
     ConnectionStringSettingsCollection cssc = 
      ConfigurationManager.ConnectionStrings; 

     String connString = cssc["FTWAS400"].ToString(); 

     iDB2Connection conn = new iDB2Connection(connString); 

     conn.Open(); 

     iDB2Command cmd = new iDB2Command(
        "insert into tburrows.qcustcdt (cusnum, init, lstnam, street, city, state, zipcod, cdtlmt, chgcod, baldue, cdtdue) values (@cusnum, @init, @lstnam, @street, @city, @state, @zipcod, @cdtlmt, @chgcod, @baldue, @cdtdue)", conn); 


     cmd.DeriveParameters(); 

     cmd.Parameters["@cusnum"].Value = Request["txtCUSNUM"]; 
     cmd.Parameters["@init" ].Value = Request["txtINIT"]; 
     cmd.Parameters["@lstnam"].Value = Request["txtLSTNAM"]; 
     cmd.Parameters["@street"].Value = Request["txtSTREET"]; 
     cmd.Parameters["@city"].Value = Request["txtCITY"]; 
     cmd.Parameters["@state"].Value = Request["txtSTATE"]; 
     cmd.Parameters["@zipcod"].Value = Request["txtZIPCOD"]; 
     cmd.Parameters["@cdtlmt"].Value = Request["txtCDTLMT"]; 
     cmd.Parameters["@chgcod"].Value = Request["txtCHGCOD"]; 
     cmd.Parameters["@baldue"].Value = Request["txtBALDUE"]; 
     cmd.Parameters["@cdtdue"].Value = Request["txtCDTDUE"]; 


     cmd.ExecuteNonQuery(); 

     cmd.Dispose(); 
     conn.Close(); 

     btnBack_Click(sender, e); 
    } 
} 

任何幫助將不勝感激。

托馬斯

+0

當你說這是「炸燬」你究竟是什麼意思?我期望拋出一個異常 - 而且這個異常的細節將非常重要。 順便說一句,你知道「使用」語句,以避免你必須顯式調用cmd.Dispose()和conn.Close()嗎? – 2008-11-22 21:13:57

+0

喬恩: 我得到的是一個「OverflowException異常的用戶代碼未處理 ‘的參數是不是有效的值的範圍確保你不被零除‘’ 在故障排除技巧,我得到 。’ 希望這有助於。 托馬斯 – user39968 2008-11-23 20:54:01

回答

3

有內

cmd.Parameters["@cusnum"].Value = field; 

另一個選項來指定字段類型。使用

cmd.Parameters.Add("@cusnum", iDB2DbType.iDB2Decimal).Value = Convert.ToDecimal(field); 

代替。這應該正確地轉換你的數據類型。如果不是十進制,則需要將iDB2Decimal更改爲適當的字段類型。