2008-11-22 12 views
4

J'essaye de construire un programme C# .net qui fonctionne comme un sous-fichier RPG sur l'AS400.AS400 C# .net insertion de nouveaux problèmes d'enregistrement

Faites fonctionner la partie de sous-fichier générale. Je peux afficher, puis modifier et mettre à jour les enregistrements existants. Je vais exploser dans mon code où j'essaye d'insérer un nouvel enregistrement. Explosion sur le

cmd.ExecuteNonQuery();

Si vous voulez voir comment cela fonctionne sans l'insert aller à

http://144.162.90.78/thomas/

Regardez le Website1a

est le code ici.

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); 
    } 
} 

Toute aide sera grandement appréciée.

Thomas

+0

Quand vous dites que c'est "exploser", que voulez-vous dire exactement? Je m'attends à ce qu'une exception soit lancée - et les détails de cette exception seront très importants. Btw, connaissez-vous les instructions "using" pour éviter d'appeler explicitement cmd.Dispose() et conn.Close()? –

+0

Jon: Ce que je reçois est un « OverflowException non prise en charge par le code utilisateur « Le paramètre est pas dans la plage de valeurs valides Assurez-vous que vous n'êtes pas division par zéro « » Sous les conseils de dépannage je reçois . » Hope this helps. Thomas – user39968

+0

Le code entier en est à Http://144.162.90.78/thomas/notes – user39968

Répondre

3

Il y a une autre option dans le

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

pour spécifier le type de champ. Utilisez

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

à la place. Cela devrait convertir vos types de données correctement. Vous aurez besoin de changer l'iDB2Decimal au type de champ approprié sinon décimal.

+0

N'utilisez pas 'cmd.DeriveParameters()' avec cette solution! – Anytoe