【问题标题】:Where should I place my database connection string and how do I handle connection pooling?我应该在哪里放置我的数据库连接字符串以及如何处理连接池?
【发布时间】:2011-05-04 05:04:51
【问题描述】:

我正在开发一个托管在 IIS 服务器上的 asp.net 应用程序。要打开我使用的连接:

SqlConnection con = new SqlConnection("Server = INLD50045747A\\SQLEXPRESS; 
Database = MyDatabase;User ID = sa; Password = Welcome1; Trusted_Connection = False;");
con.Open();

是否可以将此连接字符串存储在某个地方,这样我就不需要写入每个 aspx.cs 文件?我正在使用 MSSQL 数据库。

我遇到的问题是:

从池中获取连接之前的超时时间已过。这可能是因为所有池连接都在使用中并且达到最大池大小

我在某处看到要求我将最大连接池增加到 100。这会影响我的应用程序的性能吗?

【问题讨论】:

    标签: c# asp.net connection-string


    【解决方案1】:

    您可能没有正确关闭打开的连接。

    增加“池大小”就像在瀑布下放一个更大的水桶 - 会有所帮助,但几乎没有。

    尝试找出发生此类情况的区域:

    con.Open();
    

    确保如果它不在 try/catch 中,则确保它在一个中,并且包含 finally 语句。

    try {
       con.Open();
       //several other data base releated
       //activities
    } catch (Exception ex) {
      // do something
    } finally {
      con.Close();
    }
    

    另外,为了避免使用 finally 块,您可以将 SqlConnection 包装在 using 语句中。

      using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["yourKey"].ConnectionString))
            {
    
                // write your code here 
    
            }
    

    关于您关于连接字符串的问题,是的,将其存储在您的 web.config 中

    <connectionStrings>
    <add name="name" connectionString="Data Source=;Initial Catalog=;User ID=sa;password=;Persist Security Info=True;Connection TimeOut=20; Pooling=true;Max Pool Size=500;Min Pool Size=1" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    

    【讨论】:

    • 但是为什么你需要保留 con.open();在尝试块?保留 con.Close();在 finally 块中??
    • 当然。我通常只是将所有可能失败的东西都放在 try 块中。
    【解决方案2】:

    将其存储在web.config 文件的connectionStrings 部分中:

    <connectionStrings>
        <add name="name"
            connectionString="Data Source=;Initial Catalog=;User ID=sa;password=;Persist Security Info=True;Connection TimeOut=20; Pooling=true;Max Pool Size=500;Min Pool Size=1"
            providerName="System.Data.SqlClient"/>
    </connectionStrings>
    

    然后您将能够在您的代码中访问它...

    ConfigurationManager.ConnectionStrings["name"].ConnectionString
    

    【讨论】:

    • 您需要使用:ConfigurationManager.ConnectionStrings["name"].ConnectionString 来获取实际的连接字符串值....
    【解决方案3】:

    你也可以使用

    它会自动处理对象

    如果你使用“使用”,则不需要 con.close 和 all

      using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["yourKey"].ConnectionString))
            {
    
         // write your code here 
    
            }
    

    【讨论】:

      【解决方案4】:

      将连接字符串存储在 web.config 文件中。你可以找到很多例子。检查此属性。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring%28v=vs.71%29.aspx

      谢谢 尚卡尔

      【讨论】:

      • 如果我在 web.config 文件中写入连接字符串,那么如何从每个 aspx.cs 文件打开连接?只写 con.open()??
      • @Sankar:总是最好在答案中编写代码并提供链接。它会更有帮助。
      【解决方案5】:

      使用两者的帮助

      try
      {
       con.Open();
      }
      catch(Exception ex)
      {
      if(con.State== ConnectionState.Open)
      con.Close();
      }
      finally
      {
      con.Close();
      }
      

      并在 Web.Config 中的 Configuration 下添加连接字符串。这会对你有所帮助。

      【讨论】:

        【解决方案6】:

        是的,将其存储在 web.config 文件中,但请确保如果出现错误,它不会向用户显示 web.config 文件的内容(从而向全世界展示您的密码。)

        如果您在许多应用程序中使用相同的连接字符串,您可以考虑编写一个服务来提供连接字符串,这样您只需在一个地方更改它们。

        【讨论】:

          【解决方案7】:

          最好的选择是使用类型化设置。

          打开您的项目属性。
          转到“设置”标签。
          添加新设置,例如MainConnectionString,选择设置类型(ConnectionString)。在值中插入您的连接字符串或点击“...”按钮以打开一个对话框来构建连接字符串。

          现在您可以像这样在代码中引用您的连接字符串:

          Settings.Default.MainConnectionString

          如果你打开你的配置文件,你会看到

            <configuration>
              <connectionStrings>
                <add name="WebApplication1.Properties.Settings.MainConnectionString"
                     connectionString="Data Source=localhost;Initial Catalog=AdventureWorks;Integrated Security=True"
                     providerName="System.Data.SqlClient" />
              </connectionStrings>
          

          你可以有这个连接字符串 指定:

          • 在其自己的 web.config 中用于一个网站。
          • 用于一组网站
          • 对于一个盒子上的所有网站:在机器范围 web.config 中。
          • 对于一个盒子上的所有应用程序:在 machine.config 中。

          如果您有很多应用程序连接到同一个数据库并安装在一个盒子上,这会很方便。如果数据库位置发生变化,您只需更新一个文件 machine.config,而不是转到每个应用程序的配置文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-09
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 2013-12-15
            • 1970-01-01
            相关资源
            最近更新 更多