0

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

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

public string connstring = "";

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

7 回答 7

3

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

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

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

if(ConfigurationManager.ConnectionStrings.Count > 0 && 
ConfigurationManager.ConnectionStrings["connString"] != null)
于 2012-12-18T06:18:12.737 回答
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。

于 2012-12-18T06:34:05.007 回答
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;
}

并在应用程序负载中实例化一次(在 global.asax 中):

void Application_Start(object sender, EventArgs e)
{
    myClass.con = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ToString());
}
于 2012-12-18T06:21:07.000 回答
1

你为什么不创建一个单独的类来实例化连接,就像这样

于 2012-12-18T06:21:34.723 回答
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);

谢谢

于 2012-12-18T06:21:35.693 回答
1

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

通常,您不应在 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());
    }

    ...
}

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


你绝对应该考虑把相关的东西放在一个地方。这是规则:除了方法调用外,不要重复任何代码(在这种情况下,从 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

于 2012-12-18T06:33:03.603 回答
-1

这是我所做的:

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

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

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

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

数据表/数据集 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

于 2012-12-18T06:39:22.483 回答