繁体   English   中英

是公共静态sql连接安全吗

[英]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.MyConnectionStringMyConnectionString是该设置名为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM