C# 类型为';的未处理异常;System.StackOverflowException';在GUI_Login.DLL中发生

C# 类型为';的未处理异常;System.StackOverflowException';在GUI_Login.DLL中发生,c#,asp.net,C#,Asp.net,我正在将控制台应用程序登录更改为基于web的应用程序,并收到以下关于未处理异常的错误 在控制台应用程序中,我有以下代码行驻留在StoredProcDemo类中: StoredProcDemo spd = new StoredProcDemo(); 在Web应用程序中,我有: Login spd = new Login(); 我不知道该换什么。有人能透露一些见解吗?谢谢,也许是为什么?非常感谢 这里是完整的代码,如果需要的话 using System; using System.Colle

我正在将控制台应用程序登录更改为基于web的应用程序,并收到以下关于未处理异常的错误

在控制台应用程序中,我有以下代码行驻留在StoredProcDemo类中:

 StoredProcDemo spd = new StoredProcDemo();
在Web应用程序中,我有:

Login spd = new Login(); 
我不知道该换什么。有人能透露一些见解吗?谢谢,也许是为什么?非常感谢

这里是完整的代码,如果需要的话

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

        }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用系统数据;
使用System.Data.SqlClient;
使用System.Data.Sql;
使用System.Data.SqlTypes;
名称空间GUI_登录
{
公共部分类登录:System.Web.UI.Page
{
SqlConnection-conn=null;
SqlParameter parmReturnValue;
Login spd=新登录();
受保护的无效页面加载(对象发送方、事件参数e)
{   
}
受保护的无效btnLogin\U单击(对象发送方,事件参数e)
{
RunStoredProcParams();
}
public void RunStoredProcParams()
{
//运行简单的存储程序
spd.RunStoredProcParams();
int结果;
结果=-1;
conn=conn=new SqlConnection(“数据源=。\\SQLEXPRESS;AttachDbFilename=c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQLEXPRESS\\MSSQL\\Data\\UserDB.mdf;集成安全性=True;连接超时=30;用户实例=True;集成安全性=SSPI”);
conn.Open();
尝试
{
//创建并打开连接对象
conn=conn=new SqlConnection(“数据源=。\\SQLEXPRESS;AttachDbFilename=c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQLEXPRESS\\MSSQL\\Data\\UserDB.mdf;集成安全性=True;连接超时=30;用户实例=True;集成安全性=SSPI”);
conn.Open();
//创建标识存储过程的命令对象
SqlCommand cmd=新的SqlCommand(“PassParamUserID”,conn);
//设置命令对象,使其知道如何执行存储过程
cmd.CommandType=CommandType.storedProcess;
Add(新的SqlParameter(“@FirstName”,txtUserName.Text));
parmReturnValue=cmd.Parameters.AddWithValue(“@UserId”,SqlDbType.Int);
parmReturnValue.Direction=参数Direction.ReturnValue;
cmd.ExecuteNonQuery();
结果=Convert.ToInt32(cmd.Parameters[“@UserId”].Value);
康涅狄格州关闭();
//lblResult.Text=结果;
如果(结果>0)
{
lblResult.Text=(“数据库中不存在用户”);
}
否则如果(结果<0)
{
lblResult.Text=(“拒绝,请尝试其他用户名”);
}
}
最后
{
如果(conn!=null)
{
康涅狄格州关闭();
}
}
}

无限期地递归运行RunStoredProcParams()

注释掉这一行:

spd.RunStoredProcParams();
也请评论这一点:

Login spd = new Login();

无限期地递归运行RunStoredProcParams()

注释掉这一行:

spd.RunStoredProcParams();
也请评论这一点:

Login spd = new Login();

即使忽略
RunStoredProcParams
您也会在尝试创建新实例时出现堆栈溢出:

public partial class Login : System.Web.UI.Page
{
    // Removed extraneous stuff...
    Login spd = new Login();
}
为什么希望
Login
的每个实例都引用它立即创建的另一个
Login
实例

基本上,构造函数将被递归调用,直到它爆炸为止


你想在这里做什么,为什么?在控制台应用程序中,你可能正在创建一个
StoredProcDemo
的实例,但我确信它不会在
StoredProcDemo
本身中(作为实例变量初始值设定项)。可能是在
程序中
或类似的东西中?这会更有意义。

即使忽略
RunStoredProcParams
也会在尝试创建新实例时出现堆栈溢出:

public partial class Login : System.Web.UI.Page
{
    // Removed extraneous stuff...
    Login spd = new Login();
}
为什么希望
Login
的每个实例都引用它立即创建的另一个
Login
实例

基本上,构造函数将被递归调用,直到它爆炸为止


你想在这里做什么,为什么?在控制台应用程序中,你可能正在创建一个
StoredProcDemo
的实例,但我确信它不会在
StoredProcDemo
本身中(作为实例变量初始值设定项)。可能是在
程序中
或类似的东西中?这会更有意义。

我收到了相同的错误?GUI\u Login.dll中发生了类型为“System.StackOverflowException”的未处理异常。编译器在Login spd=new Login()时停止@jpavlov:不,编译器并没有就此停止。它会很好地编译-事实上,您在执行时遇到一个异常,这表明了这一点。实际上,非常令人惊讶的是,构造函数接受调用自己:)我遇到了相同的错误?GUI_Login.dll中发生了一个未处理的“System.StackOverflowException”类型的异常。编译器停止运行登录时spd=新登录()@jpavlov:不,编译器并没有到此为止。它会编译得很好——执行时出现异常的事实表明了这一点。实际上,构造函数接受调用自己是非常令人惊讶的:)事实上,我把它放在控制台应用程序的主位置。我仍然是一个元素程序员,必须深入研究接口并使用它们。Jon,你的修复程序成功了。你能让我参考一些我可以阅读的文档来了解更多关于使用实例的信息吗?我将非常感激。再次感谢你帮我节省时间。@jpavlov:我建议