Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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/7/sql-server/27.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_Ado.net - Fatal编程技术网

C# 当许多客户端试图写入表时,为什么会出现SQL Server错误?

C# 当许多客户端试图写入表时,为什么会出现SQL Server错误?,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我在大约200台机器上有一个简单的程序,记录用户打开的表单。每次打开表单时,都会打开一个Sql连接,插入一行,我猜连接是关闭的?我读到连接池在默认情况下是打开的,所以我猜它不是真的关闭它?我不允许调用web服务或可能更好的方法,所以我的问题是为什么会出现此错误,是否存在此错误以及如何修复它?还是SQL端的什么东西?也许我可以试着改变一下环境 using (SqlConnection connection = new SqlConnection(connectionString))

我在大约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 server的其他连接

再试一次怎么样

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

                }
            }
        }
再试一次怎么样

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

                }
            }
        }

您正在应用程序代码中使用connections属性-完成后,
using
块将关闭连接。我怀疑服务器端需要更改某些内容,以使用不同的并发模型。你也可能有更深层次的网络问题,但是只有200个用户,除非你有真正便宜的交换机或路由器,否则这似乎不太可能。如果你在谷歌上搜索-在建立与SQL Server的连接时发生了与网络相关或特定于实例的错误-你会看到其他Q的用户有这个问题,很多人都提到了网络过载、防火墙等问题,我会想象这是网络而不是SQL server,如果你的连接用完了,你会收到一条消息说没有更多的连接,通常-我认为这是间歇性的-如果你在错误后睡眠100毫秒,然后进行有限次数的自动重试-这会有助于您在应用程序代码中使用connections属性-完成后,
using
块将关闭连接。我怀疑服务器端需要更改某些内容,以使用不同的并发模型。你也可能有更深层次的网络问题,但是只有200个用户,除非你有真正便宜的交换机或路由器,否则这似乎不太可能。如果你在谷歌上搜索-在建立与SQL Server的连接时发生了与网络相关或特定于实例的错误-你会看到其他Q的用户有这个问题,很多人都提到了网络过载、防火墙等问题,我会想象这是网络而不是SQL server,如果你的连接用完了,你会收到一条消息说没有更多的连接,通常-我认为这是间歇性的-如果你在错误后睡眠100毫秒,然后进行有限次数的自动重试-这会有帮助吗这是个好主意。。我试试这个。。如果问题是拥塞,那么重试5次就足够了。。我可以查看异常日志,发现这是个好主意。。我试试这个。。如果问题是拥塞,那么重试5次就足够了。。我可以查看异常日志并找出原因