[英]is public static sql connection secure
我正在使用C#开发Windows服务,如果可以,我可能会在Web应用程序中使用相同的方法。 主要服务使用的是一个用于自身的sqlconnection,使用ConfigurationManager从app.config中检索该sqlconnection,并且它创建一些不同类型的线程来运行多个任务。 每个线程都有自己的连接(存储在class属性中)。
public partial class MainService : ServiceBase{
private static string SQLConnStr;
protected static SqlConnection SQLConn;
}
class OtherClass{
private sqlconnection sqlconn;
private string connstr;
}
我坚持的部分是,当我创建另一个对象类型时,我需要该对象能够使用OtherClass的连接访问数据库。 将创建此新对象,并在OtherClass中对其进行调用,以供以后处理。
是否可以重用OtherClass的sql连接? 将sql连接字符串设为public static是否安全可靠? 我使用的设计不好吗?
将其传递给OtherClass
构造函数?
详细示例 :
public partial class MainService : ServiceBase{
private string SQLConnStr;
}
class OtherClass{
private string connstr;
public OtherClass(string _connstr) { this.connstr = _connstr; }
public foo() { using(var conn = new SqlConnection(connstr) { ... } }
}
由于存在连接池,因此每次在.NET中都可以创建new SqlConnection
。
您应该使用相应的配置机制。 对于应用程序/ Windows服务,这将是app.config
文件;对于Web应用程序,将是web.config
文件;对于DLL,应将设置从DLL的app.config
复制到应用程序的app.config/web.config
如此处所述(DLL不会读取其配置文件,因此设置需要进入应用程序的配置文件中)。
话虽这么说:使用Visual Studio中的设置设计器可以简单地添加新的连接字符串设置。 如有必要,也将其添加到其他项目中。
要使用同一项目中类的连接字符串,则可以简单地使用Settings.Default.MyConnectionString
, MyConnectionString
是该设置名为MyConnectionString
。
DLL的另一个例外:某些DLL不需要自己的设置,但是需要访问数据库。 在这种情况下,您可以将连接字符串甚至SqlConnection
传递给需要数据库访问的函数。
connection * string *和连接本身之间有区别。 对于连接字符串(描述您应该连接到的位置),您可以将其存储在配置文件中,以便您轻松更改它。
必须打开和关闭用于与数据库通信的连接本身。 使用数据读取器时,通常无法将相同的连接用于同时命令。 最好尽快打开一个新连接,并尽快关闭它。 让内置的连接池来优化实际的连接。
我喜欢您的回答,但是经过一段时间的研究后,我的设计仍然很糟糕。 因此,我决定在MainService中创建一个公共静态查询函数:
public static void qQuery(string querystr){
using(sqlconnection conn = new sqlconnection(sqlconnstr){
.....
}
}
sqlconnstr是MainService中的私有字符串,该字符串在服务启动时初始化。
我希望这是一种安全可靠的方式...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.