Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定在始终在线群集中导致异常的SQL Server_C#_Sql Server_Alwayson - Fatal编程技术网

C# 如何确定在始终在线群集中导致异常的SQL Server

C# 如何确定在始终在线群集中导致异常的SQL Server,c#,sql-server,alwayson,C#,Sql Server,Alwayson,我有一个C#应用程序,可以连接到一个8节点的SQL Server始终在群集上。我们使用连接字符串中的applicationcontent=ReadOnly参数和侦听器IP来允许连接到所有服务器进行查询 我们正在应用程序中记录存储过程执行和返回结果所花费的时间。在日志中,我们还希望捕获连接到的确切服务器。当抛出异常时,堆栈跟踪中会有一个“路由目的地”,它提供所连接的确切服务器,而不是侦听器 我在SQL客户机代码中看到,路由目标来自内部连接,但无论何时使用该对象,该对象似乎都是受保护的、内部的或私有

我有一个C#应用程序,可以连接到一个8节点的SQL Server始终在群集上。我们使用连接字符串中的
applicationcontent=ReadOnly
参数和侦听器IP来允许连接到所有服务器进行查询

我们正在应用程序中记录存储过程执行和返回结果所花费的时间。在日志中,我们还希望捕获连接到的确切服务器。当抛出异常时,堆栈跟踪中会有一个“路由目的地”,它提供所连接的确切服务器,而不是侦听器

我在SQL客户机代码中看到,路由目标来自内部连接,但无论何时使用该对象,该对象似乎都是受保护的、内部的或私有的

有人知道如何到达这个内部连接对象或路由目标吗?或者有人知道从其他地方获取SQL Server真实名称的其他方法吗

根据要求,这里是一个示例方法。我想获取连接到的实际服务器名称,并将其记录在Catch块中:

public static async Task<int> InserStat(Statistic stat)
    {
        List<SqlParameter> parameters = new List<SqlParameter>();
        int returnCode = -1;
        try
        {
            parameters.Add(new SqlParameter() { ParameterName = StoredProcParamNames.Account, Value = stat.Account, DbType = DbType.String, Direction = ParameterDirection.Input });
            parameters.Add(new SqlParameter() { ParameterName = StoredProcParamNames.DataSource, Value = stat.Datasource, DbType = DbType.String, Direction = ParameterDirection.Input });
            parameters.Add(new SqlParameter() { ParameterName = StoredProcParamNames.Indicator, Value = stat.Listed, DbType = DbType.Boolean, Direction = ParameterDirection.Input });
            parameters.Add(new SqlParameter() { ParameterName = StoredProcParamNames.ServiceIndicator, Value = stat.Service, DbType = DbType.Boolean, Direction = ParameterDirection.Input });
            parameters.Add(new SqlParameter() { ParameterName = StoredProcParamNames.TimeStamp, Value = stat.TransactionTime, DbType = DbType.DateTime2, Direction = ParameterDirection.Input });
            parameters.Add(new SqlParameter() { ParameterName = StoredProcParamNames.ReturnValue, DbType = DbType.Int32, Direction = ParameterDirection.ReturnValue });

            using (SqlConnection connection = await dataManager.GetWriteBackConnectionAsync())
            using (SqlCommand command = dataManager.SetupDbCommand("0", StoredProcNames.InsertStat, connection, parameters) as SqlCommand)
            {
                await command.ExecuteNonQueryAsync();
                returnCode = (int)parameters[parameters.Count - 1].Value; // Return code is the last parameter in the list
            }
        }
        catch (Exception e)
        {
            Dictionary<string, object> loggingDetails = PopulateLoggingDetails(parameters);
            Logger.WriteException(e, VNRCategory.DAC, -1, TraceEventType.Error, StoredProcNames.InsertStat, loggingDetails);
        }
        if (returnCode != 0)
            Logger.WriteInfoLog("Insert return code: " + returnCode, Category.DAC);
        return returnCode;
    }
公共静态异步任务InserStat(Statistic stat)
{
列表参数=新列表();
int returnCode=-1;
尝试
{
parameters.Add(新的SqlParameter(){ParameterName=StoredProcParamNames.Account,Value=stat.Account,DbType=DbType.String,Direction=ParameterDirection.Input});
parameters.Add(新的SqlParameter(){ParameterName=StoredProcParamNames.DataSource,Value=stat.DataSource,DbType=DbType.String,Direction=ParameterDirection.Input});
添加(新的SqlParameter(){ParameterName=StoredProcParamNames.Indicator,Value=stat.List,DbType=DbType.Boolean,Direction=ParameterDirection.Input});
parameters.Add(新的SqlParameter(){ParameterName=StoredProcParamNames.ServiceIndicator,Value=stat.Service,DbType=DbType.Boolean,Direction=ParameterDirection.Input});
parameters.Add(新的SqlParameter(){ParameterName=StoredProcParamNames.TimeStamp,Value=stat.TransactionTime,DbType=DbType.DateTime2,Direction=ParameterDirection.Input});
添加(新的SqlParameter(){ParameterName=StoredProcParamNames.ReturnValue,DbType=DbType.Int32,Direction=ParameterDirection.ReturnValue});
使用(SqlConnection connection=wait dataManager.GetWriteBackConnectionAsync())
使用(SqlCommand命令=dataManager.SetupDbCommand(“0”,StoredProcNames.InsertStat,connection,parameters)作为SqlCommand)
{
wait命令。ExecuteNonQueryAsync();
returnCode=(int)参数[parameters.Count-1].Value;//返回代码是列表中的最后一个参数
}
}
捕获(例外e)
{
Dictionary loggingDetails=PopulateLoggingDetails(参数);
Logger.WriteException(e,VNRCategory.DAC,-1,TraceEventType.Error,StoredProcNames.InsertStat,loggingDetails);
}
如果(返回代码!=0)
Logger.writeInfo(“插入返回代码:”+returnCode,Category.DAC);
返回代码;
}

您是否尝试在查询中使用@SERVERNAME来查看是否可以查找所连接的真实服务器?我可以在存储过程中查找,但不能在C代码中查找。我正在登录C#。您能提供sql执行和响应方法的示例代码吗。