应用程序中的单个连接字符串声明

时间:2012-12-18 06:16:09

标签: c# asp.net

在我的asp.net应用程序中,我在每个页面Page_Load函数中添加了连接字符串,并在页面顶部将该字符串声明为public。

我知道这是错的。整个应用程序运行相同的连接,所以我想只在一个地方声明连接字符串。我应该在哪里声明连接字符串?如何访问每个连接中的连接字符串?

public string connstring = "";

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack != true)
    {
        connstring = ConfigurationManager.ConnectionStrings["connString"].ToString();
        MySqlConnection connection = new MySqlConnection(connstring);
        // ----
    }
}

7 个答案:

答案 0 :(得分:3)

您已经在web.config中定义了连接字符串,您不需要在每个页面中再次定义它,只需使用ConfigurationManager中的连接字符串,而不是在每个页面上创建新的字符串变量。

ConfigurationManager.ConnectionStrings["connString"].ToString()

如果在使用连接字符串之前检查null,则更好。

if(ConfigurationManager.ConnectionStrings.Count > 0 && 
ConfigurationManager.ConnectionStrings["connString"] != null)

答案 1 :(得分:2)

您可以在webconfig文件中将其转换为

<configuration>
  < connectionstring>
     <add name="Name of Your Connection" connectionstring=""/>
  <connectionstring>
<configuration>

在Webonfig中声明后,您可以在不同的.Aspx页面中调用连接字符串,例如,

添加

system.web.configuration;

然后你可以将你的连接字符串称为

    string connection = WebConfigurationManager.ConnectionStrings["Name Of your Connection"].ConnectionString;
sqlconnection con=new sqlconnection[con];
...

您可以创建一个dataUtility类,并可以为整个项目定义一次connectionstring,例如

class dataUtility
{
 string connection = WebConfigurationManager.ConnectionStrings["Name Of your   Connection"].ConnectionString;

Public void Insert()
{
sqlconnection con=new sqlconnection(connection);
...
}
}

现在你必须只创建一个类的对象并调用insert方法。您需要在一个地方写下整个DAL。

答案 2 :(得分:1)

添加一个Web配置文件,并将您的连接放在ConnectionString部分中:

<configuration>
    <connectionStrings>
        <add name="ConnectionName" connectionString="your connection string" providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

在公共类中添加一个静态SqlConnection:

public class myClass
{
    public static System.Data.SqlClient.SqlConnection con;
}

并在Application Load(在global.asax中)实例化一次:

void Application_Start(object sender, EventArgs e)
{
    myClass.con = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ToString());
}

答案 3 :(得分:1)

为什么不创建一个实例化连接的单独类,如this

答案 4 :(得分:1)

在web.config中添加

<connectionStrings>
    <add name="StrConnection" connectionString="Server=SERVER_NAME;Database=DATABASE_NAME;user id=USER_NAME;password=PASSWORD;"/>
</connectionStrings>

在数据访问层中创建一个静态类,如:

public static class sqlConnectionProvider
    {
        public static string GetConnection()
        {
            return ConfigurationManager.ConnectionStrings["StrConnection"].ConnectionString;
        }

    }

并从业务访问层调用它,如:

return DataAccessLayer.ExecuteDataset(sqlConnectionProvider.GetConnection(), CommandType.StoredProcedure, spName, parameter);

由于

答案 5 :(得分:1)

您没有在每个页面中定义连接字符串,而是在每个页面中读取它。如果您不想这样做,更好的方法是使用静态类(或singleton)来管理它。

通常,您不应在UI代码中执行任何与数据库相关的操作。更好的方法是将工作委托给一组类(数据层)。一个简单的数据层可以是一个简单的单例类,它可以进行所有数据访问:

public class DataManager
{
    private static DataManager _instance;

    private DataManager() {}

    public static DataManager Instance
    {
        get
        {
            if (_instance == null)
                _instance = new DataManager();
            return _instance;
        }
    }

    public DbConnection GetConnection()
    {
        return new MySqlConnection(ConfigurationManager.ConnectionStrings["connString"].ToString());
    }

    ...
}

显然,这是一个非常简单的类,不适合大型项目。您应该考虑使用ORMEntityFramework工具。


你绝对应该考虑把相关的东西放在一个地方。这是规则:不要重复任何代码而不是方法调用(在这种情况下,从web.config读取连接字符串)。如果在web.config中更改连接字符串的名称会怎样?

有关设计数据访问层的指南,请参阅以下链接:

http://en.wikipedia.org/wiki/Data_access_layer
 http://msdn.microsoft.com/en-us/library/ee658127.aspx
 http://weblogs.asp.net/cumpsd/archive/2005/04/24/404058.aspx

答案 6 :(得分:-1)

这就是我的所作所为:

我在每个.Net应用程序中添加了一个UTILITIES项目。我在实用程序项目中添加了一个名为Misc.cs的文件。

在这个文件中,我添加了整个应用程序的通用功能,并将以某种方式使用。在那里添加一个新功能

Public string GetConnectionString()
{
    return ConfigurationManager.ConnectionStrings["connString"].ToString();
}

现在,这是您更改连接字符串的常见位置。随时随地使用它。如果仍需要更多抽象,请编写DAL(数据访问层)。在DAL类中定义属性,如连接字符串,命令字符串等。添加FetchData等方法(在其中编写泛型选择方法),保存数据(在此处编写genric更新/保存逻辑)。从你的前端只需要你以下来打电话

DataTable / DataSet lobj = [You_Dal_Class_Object] .FetchData([Your_select_command_here];

链接: http://www.mssqltips.com/sqlservertip/2034/writing-a-data-access-layer-dal-for-sql-server/ http://msdn.microsoft.com/en-us/library/aa581778.aspx