C# SQL Server 2012升级:带ExecuteReader()的StackOverflowException

C# SQL Server 2012升级:带ExecuteReader()的StackOverflowException,c#,sql-server,ado.net,sql-server-2012,stack-overflow,C#,Sql Server,Ado.net,Sql Server 2012,Stack Overflow,已解决:这不是SQL Server的问题,而是一个不断调用自身的递归函数/FACEPALM 我目前正在运行SQLServer2005并使用下面的代码。它所做的一切就是从SQLServer获取日期和时间,并且工作得非常完美 protected internal static string GetDateAndTime() { string strDate = null; string strSQL = null; // connect to the database and execute our

已解决:这不是SQL Server的问题,而是一个不断调用自身的递归函数/FACEPALM

我目前正在运行SQLServer2005并使用下面的代码。它所做的一切就是从SQLServer获取日期和时间,并且工作得非常完美

protected internal static string GetDateAndTime()
{
string strDate = null;
string strSQL = null;
// connect to the database and execute our SQL command
strSQL = "SELECT GETDATE() AS THEDATE";
using (SqlConnection sqlConn = new SqlConnection(Constants.CONNECTION_STRING))
{
       using (SqlCommand sqlCmd = new SqlCommand(strSQL, sqlConn))
       {
              sqlConn.Open();
              using (SqlDataReader sqlReader = sqlCmd.ExecuteReader())
              {
                     if (sqlReader.HasRows)
                         {
                         while (sqlReader.Read())
                         {
                                // assign query returned row values
                                strDate = sqlReader["THEDATE"].ToString();
                         }
                     }
              }
        }
}
}
已升级到SQL Server 2012,现在出现错误。(惊奇!)代码在这一行停止运行

using (SqlDataReader sqlReader = sqlCmd.ExecuteReader())
错误是:

-StackOverflowException was unhandled
-An unhandled exception of type 'System.StackOverflowException' occurred in System.Data.dll
-Make sure you do not have an infinite loop or infinite recursion.
请注意,除了将连接字符串指向新的SQL Server 2012数据库之外,我没有更改任何代码。

请求的信息,堆栈跟踪:

[External Code] 
     MyProject.exe!MyProject.Database.GetDateAndTime() Line 173 C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.Database.GetDateAndTime() Line 189 + 0x8a bytes C#
MyProject.exe!MyProject.frmSwitchboard.VerifyUserExists() Line 230 + 0x9 bytes  C#
MyProject.exe!MyProject.frmSwitchboard.MyProjectPreLoad() Line 136 + 0xd bytes  C#
MyProject.exe!MyProject.frmSwitchboard.frmSwitchboard_Load(object sender = {MyProject.frmSwitchboard}, System.EventArgs e = {System.EventArgs}) Line 68 C#
[External Code] 
MyProject.exe!MyProject.Program.Main() Line 18  C#
[External Code] 
请求的信息,常量。连接\u字符串: *尝试使用这两个

1. protected internal static string DATABASE_CONNECTION_STRING = @"Data Source=DBSTEST;Initial Catalog=restored 02-04-2013;User ID=sa; UID=sa;PWD=blah;Persist Security Info=True";
2. protected internal static string DATABASE_CONNECTION_STRING = @"Data Source=DBSTEST;Initial Catalog=restored 02-04-2013;User ID=sa;UID=sa;PWD=blah;Connect Timeout=300";
请求的信息,函数VerifyUserExists():

请求的信息,RunQueryAndReturnAsDataTable():

当我处理代码时,代码也会停止在同一行上运行,产生相同的错误

using (SqlDataReader sqlReader = sqlCmd.ExecuteReader())

有人碰到过这个问题吗?我怎样才能解决这个问题?请告知,谢谢

不知怎的,你在那里的线路错了。stacktrace显示以下函数正在执行递归:

MyProject.Database.GetDateAndTime
它在没有中介的情况下调用自己(假设您在调试模式下运行,没有函数会因为内联而消失)


如果你发布代码,我会看一看。也许,你现在可以弄明白了。

奇怪。错误消息中还有更多详细信息吗?堆栈跟踪?我们也在使用SQL server 2012,并在代码中使用(var reader=cmd.ExecuteReader())这一行,但没有遇到此类问题。。你的连接字符串是什么?仅供参考。你可以发布你的连接字符串吗?发布。我得走了,明天早上才能回去。对不起,非常感谢大家的帮助!直到明天,
VerifyUserExists()
看起来怎么样?嗨。你正在谈论的功能是本文开头的第一个功能。这就是GetDateAndTime()函数,这就是为什么我不确定它是否一直在调用自己?这就是为什么我说:调试器显示的行号可能是错误的,或者不是原因。第189行的GetDateAndTime()是什么?代码是优化的还是“调试的”?我通常在项目属性中将配置设置作为发行版运行,当我更改为调试时,在编译时会出现以下错误:程序集“bin\Debug\System.Runtime.InteropServices.api.dll”必须具有强签名才能标记为先决条件,虽然这看起来与我遇到的问题无关,但第189行只是一个错误日志:Logs.errorlogAppend(“\r\n用户:“+Windows.getUserIdentity()+”日期:“+Database.GetDateAndTime()+”\r\n错误:“+ex.ToString());这是GetDateAndTime的第189行吗?你又在打GetDateAndTime了?在这种情况下,我们找到了你的递归点,对吗?
using (SqlDataReader sqlReader = sqlCmd.ExecuteReader())
MyProject.Database.GetDateAndTime