在我的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);
// ----
}
}
答案 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());
}
...
}
显然,这是一个非常简单的类,不适合大型项目。您应该考虑使用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
答案 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