Ich hab folgendes Problem. Meine SQL Abfragen habe ich alle in eine eigene Klasse geschrieben und Public gemacht, damit ich sie von meiner eigentlichen Webanwendung aufrufen kann. Das ganze hat nur ein Problem. Sollte ich eine Exeption bekommen, geht die Exception Nachricht verloren. Um dies zu verhindern habe ich mir eine Hilfsklasse zusammengebastelt. Diese erzeugt ein Javascript alert und soll die Exceptionmeldung ausgeben. Die Klasse an sich funktioniert, nur wenn ich sie über die SQL Klasse aufrufe bekomme ich kein Alert ausgegeben.
Ich kenn mich in Javascript auch nicht wirklich aus, währe nett wenn mir jemand helfen könnte.
Hier mal meine SQL KLasse
using System;
using System.Data;
using System.Configuration;
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;
using System.Data.Odbc;
/// <summary>
/// Zusammenfassungsbeschreibung für sql
/// </summary>
public class sql
{
public sql()
{
//
// TODO: Konstruktorlogik hier hinzufügen
//
}
public int buttonsidnrkey(string table)
{
int key = 0;
OdbcConnection conn = new OdbcConnection(ConfigurationManager.ConnectionStrings["ADAstring"].ConnectionString);
OdbcCommand cmd = new OdbcCommand("{call ZEITEN.COUNT.GETNEXTCOUNTER (?,?)}", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@NAME", OdbcType.VarChar, 20).Value = table;
cmd.Parameters.Add("@ZAEHLER", OdbcType.Int).Direction = ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch(OdbcException e)
{
key = -1;
Alert javascript = new Alert();
javascript.Show(e.ToString());
}
conn.Close();
key = Convert.ToInt16(cmd.Parameters["@ZAEHLER"].Value);
return key;
}
und nun meine Hilfsklasse für das Javascript
using System;
using System.Data;
using System.Configuration;
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;
/// <summary>
/// Löst einen Alert per Javascript aus
/// </summary>
public class Alert
{
public Alert() { }
public void Show(string message)
{
string repMessage = message.Replace("'", "\\'");
string script = "<script type=\"text/javascript\">alert('" + repMessage + "');</script>";
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
{
page.ClientScript.RegisterClientScriptBlock(typeof(Alert), "alert", script);
}
}
}
Wäre nett wenn mir jemand helfen könnte oder einen anderen Weg zeigen könnte.
MFG
Sieht eigentlich OK aus, so wie Du es gemacht hast.
Versuche einmal anstelle IsClientScriptBlockRegistered/RegisterClientScriptBlock IsStartupScriptRegistered/RegisterStartupScript zu verwenden.
Ansonsten schau einfach mal in den Output, ob das Script überhaupt gerendert wurde.
//EDIT:
string repMessage = message.Replace("'", "\\'");
Das ist überflüssig und auserdem eine falsche Escape-Sequenz. Wenn, dann musst Du eher die " escapen, und zwar per**"**...
Grüsse
Cord
Danke für den Hinweiß. Es lag scheinbar an der Fehlermeldung die mir die olle Adabas DB zurück bringt. hab die Exceptionmeldung abgeändert auf e.Message.ToString() und nun klappt das ganze auch.
using System;
using System.Data;
using System.Configuration;
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;
/// <summary>
/// Löst einen Alert per Javascript aus
/// </summary>
public class Alert
{
public Alert() { }
public void Show(string message)
{
string script = "<script type=\"text/javascript\">alert('" + message + "');</script>";
Page page = HttpContext.Current.CurrentHandler as Page;
page.ClientScript.RegisterStartupScript(typeof(Alert), "alert", script);
}
}
Trotzdem danke.
MFG