为什么许多客户端尝试写入表时SQL Server出错?

时间:2016-07-12 13:55:44

标签: c# sql-server ado.net

我在大约200台机器上有一个简单的程序,记录用户打开的形式。每次打开一个表单时,都会打开一个Sql连接,插入一行,我猜连接是否已关闭?我读默认连接池是打开的,所以我猜它不是真的关闭它?我不被允许调用Web服务或更好的方式,所以我的问题是为什么这个错误并且存在并且想法如何解决它?或者SQL端的东西?也许我可以尝试改变一个设置?

   using (SqlConnection connection = new SqlConnection(connectionString))
        {
            try
            {
                connection.Open();

                using (SqlCommand command = new SqlCommand(
                "INSERT INTO LoggerLoanForm VALUES(@Session, @Form, @DateStamp, @LoanNumber)", connection))
                {
                    command.Parameters.Add(new SqlParameter("Session", llf.SesssionId));
                    command.Parameters.Add(new SqlParameter("Form", llf.Form));
                    command.Parameters.Add(new SqlParameter("DateStamp", llf.DateStamp));
                    command.Parameters.Add(new SqlParameter("LoanNumber", llf.LoanNumber));

                    command.ExecuteNonQuery();
                }


            }
            catch (Exception ex)
            {
                AppInsightHelper.TrackException(ex);
            }
        }

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:TCP提供者,错误:0 - 请求的名称有效,但未找到所请求类型的数据。)请求的名称有效,但未找到所请求类型的数据

错误似乎在高峰时段发生更多,所以我猜没有足够的开放连接或SQL服务器的东西?

1 个答案:

答案 0 :(得分:2)

重试怎么样

        const int max_try = 5;

        int i = max_try;

        while (i-- > 0)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                try
                {
                    connection.Open();

                    using (SqlCommand command = new SqlCommand(
                    "INSERT INTO LoggerLoanForm VALUES(@Session, @Form, @DateStamp, @LoanNumber)", connection))
                    {
                        command.Parameters.Add(new SqlParameter("Session", llf.SesssionId));
                        command.Parameters.Add(new SqlParameter("Form", llf.Form));
                        command.Parameters.Add(new SqlParameter("DateStamp", llf.DateStamp));
                        command.Parameters.Add(new SqlParameter("LoanNumber", llf.LoanNumber));

                        command.ExecuteNonQuery();
                        i = 0;
                    }


                }
                catch (Exception ex)
                {
                    if (i == 0) 
                            AppInsightHelper.TrackException(ex);
                      System.Threading.Thread.Sleep(50);

                }
            }
        }