繁体   English   中英

我应该在哪里放置我的数据库连接字符串以及如何处理连接池?

[英]Where should I place my database connection string and how do I handle connection pooling?

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

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

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

我面临一个问题,它说:

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

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

将其存储在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

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

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

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

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>

你也可以使用

它将自动处理 object

如果您使用“使用”,则不需要 con.close 和所有

  using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["yourKey"].ConnectionString))
        {

     // write your code here 

        }

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

谢谢尚卡尔

使用两者的帮助

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

并且还在配置下的 Web.Config 中添加连接字符串。 这将对您有所帮助。

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

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

最好的选择是使用键入的设置。

打开您的项目属性。
Go 到设置选项卡。
添加新设置,例如MainConnectionString 、 select 设置类型(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 站点在其自己的 web.config 中。
  • 对于一组 web 站点
  • 对于一个盒子上的所有 web 站点:在机器 scope web.config 中。
  • 对于一个盒子上的所有应用程序:在 machine.config 中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM