2008-11-22 85 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更改为适当的字段类型。