2011-05-04 48 views
2

我正在开发一个我在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,是否会影响我的应用程序的性能?

回答

4

您可能没有关闭您的开放式连接。

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

尝试并找到其中的地区像这种情况正在发生:

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 

     } 

大约在连接字符串针对您的问题,是

<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> 
+0

但为什么你需要保持con.open();在尝试块?是不是它enuf保持con.Close();在最后阻止? – scooby 2011-05-04 05:13:22

+1

当然。我通常将所有可能失败的东西放在try块中。 – 2011-05-04 05:19:19

2

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

感谢 桑卡

+0

如果我在web.config文件中写入连接字符串,那么我如何打开每个aspx.cs文件的连接?只需写con.open()? – scooby 2011-05-04 05:11:27

+0

@anargha,看到我的答案。 – kobe 2011-05-04 05:14:19

+0

@Sankar:总是希望在回答中编写代码并提供链接。它会更有帮助。 – 2011-05-04 10:52:03

4

它储存在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 
+0

您需要使用:'ConfigurationManager.ConnectionStrings [“name”] .ConnectionString'来获取实际的连接字符串值。 – 2011-05-04 05:27:22

+0

@mar_s;感谢您的更正,并让我更新它。 – 2011-05-04 05:29:25

3

了可以使用它也存储在您的web.config

它会自动销毁对象

如果你使用“使用”,则不需要con。关闭所有

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

    // write your code here 

     } 
1

使用这两种

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

的帮助,也可以添加在连接字符串中Web.Config中,配置下。这会帮助你。

1

是的,将其存储在web.config文件中,但要确保如果有错误,它不会向用户显示web.config文件的内容(因此向世界显示您的密码。)

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

0

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

打开您的项目属性。
转到设置选项卡。
添加新的设置,例如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> 

您可以指定该连接字符串 :

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

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

相关问题