当前位置:编程学习 > C#/ASP.NET >>

数据库连接错误

  public SqlConnection GetCon()
        {


            SqlConnection.ClearAllPools();
            Con = new SqlConnection(ConnectionString);
         
            Con.Open();
          
            return Con;

 for (int i = 0; i < 5000  ; i++)
            {


                        string P_Str_cmdtxt = "Select count(*) from MokuaiGFJStock";

                   SqlCommand cmd = new SqlCommand(P_Str_cmdtxt,Sql.GetCon());
                   count=(int)cmd.ExecuteScalar();
                   cmd.Dispose();
                   
             
                Console.WriteLine(i.ToString() + " ");
            }

               Console.Write( "结束 ");


为何运行2000多次的时候,提示数据库连接错误。
 string ConnectionString = "Max Pool Size=10; Data Source=10.10.16.17;Initial Catalog=PlanInventoryBook_new;uid=sa;pwd=xujunqq1";
        
错误内容:“成功与服务器建立连接,但是在登录前的握手期间发生错误。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 0 - 管道的另一端上无任何进程。)” --------------------编程问答-------------------- 数据库连接要及时关闭,多用using。
如:using(SqlConnection conn = new Sqlconnection())
{
  //
  conn.Open();
  //下面再写SqlCommand以及执行语句等
} --------------------编程问答-------------------- SqlConnection 只有Open,没有Close.

另外,Connection是可以重用的,没必要每个Command开新的连接。 --------------------编程问答--------------------

SqlConnection conn = GetCon();
 for (int i = 0; i < 5000  ; i++)
            {


                        string P_Str_cmdtxt = "Select count(*) from MokuaiGFJStock";

                   SqlCommand cmd = new SqlCommand(P_Str_cmdtxt,conn);
                   count=(int)cmd.ExecuteScalar();
                   cmd.Dispose();
                   
             
                Console.WriteLine(i.ToString() + " ");
            }
               conn.Close();
               Console.Write( "结束 ");
--------------------编程问答-------------------- 你这是要整哪样,开5000个sql连接,你想把数据库服务器搞崩溃么,
每次连接前 判断数据库 连接是否开启,
如果开启就没必要再创建新的连接了 --------------------编程问答--------------------
  public class SqlHelp
    {
        SqlDataAdapter Da;
        DataSet Ds;
        SqlCommand Cmd;
       string ConnectionString = "Max Pool Size=10; Data Source=10.10.16.17;Initial Catalog=PlanInventoryBook_new;uid=sa;pwd=xujunqq1";
        SqlConnection Con;
        
        /// <summary>
        /// 构造函数
        /// </summary>
        public SqlHelp()
        {
        }

        /// <summary>
        /// 连接数据库
        /// </summary>
        /// <returns></returns>
        public SqlConnection GetCon()
        {
               SqlConnection.ClearAllPools();
                Con = new SqlConnection(ConnectionString);
                Con.Close();
                Con.Open();
                  return Con;
             
          
          

        }


        /// <summary>
        /// 执行SQL语句
        /// </summary>
        /// <param name="cmdtxt">要执行的SQL语句</param>
        /// <returns></returns>
        public bool GetExecute(string cmdtxt)
        {
            Cmd = new SqlCommand(cmdtxt, GetCon());
            try
            {
                Cmd.ExecuteNonQuery();
               
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("错误:" + ex.Message, "错误提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                return false;
            }
            finally
            {
                if (GetCon().State == ConnectionState.Open)
                {
                    GetCon().Close();
                    GetCon().Dispose();
                }
                
                
                
                
                  Cmd.Dispose();
                  Cmd.Connection.Close();
                  SqlConnection.ClearAllPools();
                
               // 
            }
            

        }


        /// <summary>
        /// 返回数据集
        /// </summary>
        /// <param name="cmdtxt">需要查询的SQL语句</param>
        /// <returns></returns>
        public DataSet GetDs(string cmdtxt)
        {
            try
            {
                Da = new SqlDataAdapter(cmdtxt, GetCon());
                Ds = new DataSet();
                Da.Fill(Ds);
                return Ds;
            }
            catch (Exception ex)
            {
                MessageBox.Show("错误:" + ex.Message, "错误提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                return null;
            }
            finally
            {
                 //  Ds.Dispose();
                  SqlConnection.ClearAllPools();
               
            }
        }

每次都要调用geton(),数据库连接总被打开后出错。怎么重写啊? --------------------编程问答--------------------

                    GetCon().Close();
                    GetCon().Dispose();

严重错误!你关闭的是新建的连接,而不是原来是用的那个。
 

--------------------编程问答-------------------- 受连接数限制.
把数据库的连接数改为大一些,你应该是只允许连接十个把它改为一百个,如果改为0不受限制 --------------------编程问答--------------------    乱 套 了   。。。 --------------------编程问答-------------------- 都要加COLSE() --------------------编程问答-------------------- 我建议把这个数据库连接定义成一个静态变量,然后需要时就调用它,从而解决了呢频繁打开连接的问题. --------------------编程问答-------------------- 连接数受限,另注意关闭连接。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,