【问题标题】:TCP error on a C#.Net application with SQL Server 2008 on the backend在后端使用 SQL Server 2008 的 C#.Net 应用程序上的 TCP 错误
【发布时间】:2014-12-11 08:57:31
【问题描述】:

我使用 C#、.Net 和 SQL Server 作为数据库工具制作了一个应用程序。

今天我在多用户环境中运行它。我在服务器上托管 SQL Server 并将应用程序安装在客户端计算机上。最初它工作正常,但一段时间后我收到一条错误消息。错误截图如下。

我使用此代码创建连接字符串 -

  class SqlConnDAC
    {
         public static SqlConnection CreateConn()
          {
           SqlConnection con = new SqlConnection(@"Data Source=XXX.XXX.X.XXX\SQLEXPRESS;Initial    Catalog=TrulyDB;User ID=sa;Password=XXXXXXXX");
           return con;
           }
     }

我使用以下代码将数据插入到 OCF 表中-

        public string OCF_EntryDB_Commerce(OCF_BO formDb)
    {
        try
        {
            string intOCF=formDb.OCF_Cont_No;

            SqlConnection con = SqlConnDAC.CreateConn();
            SqlDataAdapter sda = new SqlDataAdapter("select * from OCF_Commerce", con);
            DataSet ds = new DataSet();
            sda.Fill(ds, "OCF_Commerce");
            DataTable dt = ds.Tables["OCF_Commerce"];
            DataRow dr = dt.NewRow();
            dr[0] = formDb.OCF_Cont_No;
            dr[1] = formDb.Customer_Name;
            dr[2] = formDb.Order_Cont_Type;
            dr[3] = formDb.Book_No;
            dr[4] = formDb.Area_To_Be_Served;
            dr[5] = Convert.ToInt32(formDb.No_of_Floor);
            dr[6] = formDb.Type_Of_Premisses;
            dr[7] = formDb.Phone_Number;
            dr[8] = formDb.Email_ID;
            dr[9] = formDb.Adress;
            dr[10] = formDb.Adress_To_be_serverd;
            dr[11] = Convert.ToInt32(formDb.Cont_Value);
            dr[12] = Convert.ToInt32(formDb.Cont_Tax);
            dr[13] = Convert.ToInt32(formDb.Total);
            dr[14] = formDb.Cont_Date;
            dr[15] = formDb.Cont_Month;
            dr[16] = formDb.Cont_Year;
            dr[17] = formDb.Service_Start_Date;
            dr[18] = formDb.Service_Start_Month;
            dr[19] = formDb.Service_Start_Year;
            dr[20] = formDb.Cont_Period_From;
            dr[21] = formDb.Cont_Period_From_MM;
            dr[22] = formDb.Cont_Period_From_YY;
            dr[23] = formDb.Cont_Period_To;
            dr[24] = formDb.Cont_Period_To_MM;
            dr[25] = formDb.Cont_Period_To_YY;
            dr[26] = formDb.TermsOfPayments;
            if (formDb.TypeOfSite == "SingleSite")
            {
               intOCF = formDb.OCF_Cont_No;
            }
            else if (formDb.TypeOfSite == "MultipleSite")
            {
                intOCF = GenerateInt_OCF(formDb.OCF_Cont_No);

            }

            dr[27] = intOCF;
            dr[28] = formDb.OperatingBranch;

            OCF_Int_ID.internalOCF = intOCF;
              dt.Rows.Add(dr);
            SqlCommandBuilder sbil = new SqlCommandBuilder(sda);
            sda.Update(dt);

            return ("\nDone - and internal OCF number for "+formDb.Adress_To_be_serverd+" ="+intOCF+" \n");
       }
  }

【问题讨论】:

  • 附加调试器并以文本形式而不是屏幕截图的形式向我们提供错误消息怎么样?
  • System.Data.SqlClient.SqlException (0x80131904):从服务器接收结果时发生传输级错误。 (提供者:TCP Provider,错误:0 - 指定的网络名称不再可用。)---> System.ComponentModel.Win32Exception (0x80004005):指定的网络名称不再可用@KUMARCH

标签: c# sql-server ado.net connection-pooling tcpclient


【解决方案1】:

我的第一个想法是您遇到了网络问题。但是还有其他原因,例如SQL请求过多等。看看 Microsoft technet

正如一些关于 SQL 的建议可以为您省去一些麻烦: 您正在使用 select *,然后按返回的顺序读取字段。如果您计划对产品进行任何升级,请查看使用字段名称获取值,这样当您添加或删除或更改字段时代码不会中断。还有一个问题是 select * 必须访问 master 数据库以获取字段列表,这是对性能的轻微影响,但如果 master 忙于其中的很多,它可能会成为瓶颈,或者更糟的是仍然被锁定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多