Announcement

Collapse
No announcement yet.

Oracle Sequence in button click event(C#)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle Sequence in button click event(C#)

    Hallo!

    Habe Probleme mit einem Button. Diese ASPX-Seite soll nach dem Button-Click einen neuen Benutzer in eine Oracle-Tabelle eintragen und die Benutzer-ID ausgeben. Wenn ich die Seite im Browser teste, dann passiert nichts, die Eintragungen auf der Seite bleiben erhalten, aber das Passwort erlischt. Wo kann das Problem sein?

    Hier der Code:
    [highlight=xml]
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="new_user.aspx.cs" Inherits="new_user" %>
    <%@ Import Namespace="System.Data.OracleClient" %>
    <%@ Import Namespace="System.Data" %>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
    <!-- siehe C#-Code -->
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    ...[/highlight]

    [highlight=csharp]
    protected void button1_click(object sender, EventArgs e)
    {
    OracleConnection con = new OracleConnection("uid=Test;pwd=xxx");

    try
    {
    con.Open();
    OracleCommand spcmd = new OracleCommand("New_User", con);
    spcmd.CommandType = CommandType.StoredProcedure;
    spcmd.Connection = con;

    OracleCommand insSQL = new OracleCommand(
    @"Insert into USERS (user_id, username, password, salutation,
    academic_title, first_name, last_name, dob, street_address,
    company_name, street_address_2, country, postal_code, city,
    email_address, country_code, prefix, mobile_phone, home_phone,
    language, newsletter, specials, membership, remarks)
    values (:new_user_seq.nextval, _username, _password,
    _salutation, _academic_title, _first_name, _last_name,
    _dob, _street_address, _company_name,
    _street_address_2, _country, _postal_code, _city,
    _email_address, _country_code, _prefix, _mobile_phone,
    _home_phone, _language, null, null, null, _remarks)", con);
    Object users = insSQL.ExecuteNonQuery();

    spcmd.Parameters.Add("new_user_seq.nextval", OracleType.Number, 10, "user_id").
    Value = ParameterDirection.Output;
    spcmd.Parameters.Add("p_salutation", OracleType.VarChar, 10, "salutation").
    Value = txtSalutation.Text;
    spcmd.Parameters.Add("p_academic_title", OracleType.VarChar, 20, "academic_title").
    Value = txtTitle.Text;
    spcmd.Parameters.Add("p_first_name", OracleType.VarChar, 70, "first_name").
    Value = txtFirstname.Text;
    spcmd.Parameters.Add("p_last_name", OracleType.VarChar, 70, "last_name").
    Value = txtLastname.Text;
    spcmd.Parameters.Add("p_dob", OracleType.DateTime, 12, "dob").
    Value = txtDOB.Text;
    spcmd.Parameters.Add("p_language", OracleType.VarChar, 30, "language").
    Value = txtLanguage.Text;
    spcmd.Parameters.Add("p_country_code", OracleType.VarChar, 3, "country_code").
    Value = txtCountrycode.Text;
    spcmd.Parameters.Add("p_prefix", OracleType.Number, 3, "prefix").
    Value = txtPrefix.Text;
    spcmd.Parameters.Add("p_home_phone", OracleType.VarChar, 20, "home_phone").
    Value = txtPhonenumber.Text;
    spcmd.Parameters.Add("p_company_name", OracleType.VarChar, 40, "company_name").
    Value = txtCompanyname.Text;
    spcmd.Parameters.Add("p_street_address", OracleType.VarChar, 70, "street_address").
    Value = txtStreet.Text;
    spcmd.Parameters.Add("p_street_address_2", OracleType.VarChar, 70, "street_address_2").
    Value = txtCompanystreet.Text;
    spcmd.Parameters.Add("p_postal_code", OracleType.VarChar, 10, "postal_code").
    Value = txtZip.Text;
    spcmd.Parameters.Add("p_city", OracleType.VarChar, 50, "city").
    Value = txtCity.Text;
    spcmd.Parameters.Add("p_country", OracleType.VarChar, 50, "country").
    Value = txtCountry.Text;
    spcmd.Parameters.Add("p_mobile_phone", OracleType.VarChar, 20, "mobile_phone").
    Value = txtMobilephone.Text;
    spcmd.Parameters.Add("p_email_address", OracleType.VarChar, 50, "email_address").
    Value = txtEmailaddress.Text;
    spcmd.Parameters.Add("p_username", OracleType.VarChar, 16, "username").
    Value = txtUsername.Text;
    spcmd.Parameters.Add("p_password", OracleType.VarChar, 16, "password").
    Value = txtPassword.Text;
    spcmd.Parameters.Add("p_remarks", OracleType.VarChar, 1000, "remarks").
    Value = txtRemarks.Text;
    spcmd.ExecuteNonQuery();

    // now insert a new record and return user id

    OracleCommand qcmd = new OracleCommand("select new_user_seq.nextval from dual", con);

    Object new_user = qcmd.ExecuteScalar();

    lblMsg.Text = String.Format("Your ID = {0}", spcmd.Parameters["user_id"].Value.ToString());

    }
    catch (Exception ex)
    {
    lblMsg.Text = "Error --> " + ex.Message;
    }
    finally
    {
    con.Close();
    }
    }
    [/highlight]
    Zuletzt editiert von Jürgen Thomas; 15.02.2010, 14:07. Reason: {code} ist falsch; [code] wäre richtig, [highlight=...] ist noch besser; Vorschau benutzen!

  • #2
    Hallo,

    bitte bemühe dich künftig selbst um eine übersichtlichere Gestaltung (auch mit Zeilenumbrüchen), damit man alles Wichtige erkennt. (Ich habe dafür fast eine Viertelstunde gebraucht, damit ich alles sauber lesen und mich mit der Frage ernsthaft befassen konnte. Das wäre deine Aufgabe gewesen.) Es ist auch eher überflüssig, den ganzen INSERT-Befehl und alle Parameter aufzuführen; einige beispielhafte Zeilen würden genügen.

    Zur Sache kann ich wenig sagen, weil ich mich mit ASP.NET nicht auskenne. Aber ich wundere mich, dass du Sequence.nextval sowohl für den Insert-Befehl als auch danach abrufst; der zweite Vorgang liefert doch nicht den vom Insert-Befehl, sondern den nächsten Wert.

    Nebenbei: Wenn du schon String.Format benutzt, kannst du die Rückmeldung vereinfachen:
    [highlight=csharp]lblMsg.Text = String.Format("Your ID = {0}", spcmd.Parameters["user_id"]);[/highlight]
    Der Wert steht für ein object und wird von Format richtig erkannt und umgesetzt. Und bei Exceptions liefert ex.ToString viel mehr Informationen als ex.Message.

    Gruß Jürgen

    Comment


    • #3
      Hallo Jürgen!

      Danke für die Formattierung! Das Kernproblem mit dem Button-Event ist aber damit noch nicht geklärt.

      Vielleicht kann sich jemand den Code nochmals anschauen?

      Danke!

      Comment

      Working...
      X