Eine nicht behandelte Ausnahme des Typs 'System.StackOverflowException " ist in GUI_Login.DLL
Ich bin verändert, eine Konsole app-login über eine web-basierte Anwendung und erhalten Sie die folgenden Fehlermeldung über eine nicht Behandelte Ausnahme.
In der Konsole app habe ich die folgende Zeile des Codes, welche sich in der StoredProcDemo Klasse:
StoredProcDemo spd = new StoredProcDemo();
In der Web-Anwendung habe ich:
Login spd = new Login();
Ich bin nicht sicher, was zu ändern, über zu. Könnte jemand ein bisschen Einblick, vielen Dank und vielleicht warum? Dank so viel.
Hier ist der vollständige code, falls erforderlich.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Data.SqlTypes;
namespace GUI_Login
{
public partial class Login : System.Web.UI.Page
{
SqlConnection conn = null;
SqlParameter parmReturnValue;
Login spd = new Login();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
RunStoredProcParams();
}
public void RunStoredProcParams()
{
//run simple stored procure
spd.RunStoredProcParams();
int Result;
Result = -1;
conn = conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQLEXPRESS\\MSSQL\\DATA\\UserDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; Integrated Security=SSPI");
conn.Open();
try
{
//create and open a connection object
conn = conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQLEXPRESS\\MSSQL\\DATA\\UserDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; Integrated Security=SSPI");
conn.Open();
//Create the command object indentifying the stored procedure
SqlCommand cmd = new SqlCommand("PassParamUserID", conn);
//set the command object so it knows to execute a stored procedure
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@FirstName", txtUserName.Text));
parmReturnValue = cmd.Parameters.AddWithValue("@UserId", SqlDbType.Int);
parmReturnValue.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
Result = Convert.ToInt32(cmd.Parameters["@UserId"].Value);
conn.Close();
//lblResult.Text = Result;
if (Result > 0)
{
lblResult.Text = ("User does exist in database");
}
else if (Result < 0)
{
lblResult.Text = ("Denied, try another user name");
}
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ignorieren
RunStoredProcParams
erhalten Sie einen stack-überlauf, sobald Sie versuchen, eine neue Instanz zu erstellen:Warum wollen Sie jede Instanz von
Login
einen Verweis auf anderen InstanzLogin
, die es schafft, sofort?Grundsätzlich der Konstruktor wird rekursiv aufgerufen, bis es geht Knall.
Was sind Sie versuchen hier zu tun, und warum? In der Konsole app, die Sie kann gut sein, dass das erstellen einer Instanz
StoredProcDemo
, aber ich bin sicher, es wäre nicht inStoredProcDemo
selbst (als Instanz-Variablen-Initialisierer). Vielleicht ist es inProgram
oder etwas ähnliches? Das würde mehr Sinn machen.Führen Sie RunStoredProcParams() rekursiv auf unbestimmte Zeit.
Diese Zeile auskommentieren:
Auch Kommentar dieses: