是public static sql connection secure

时间:2014-03-07 10:05:36

标签: c# sql sql-server database

我正在使用c#中的windows服务,如果可以,我可能会在我的Web应用程序中使用相同的方法。主要服务是使用自己使用的sqlconnection,使用ConfigurationManager从app.config检索,并创建几个不同类型的线程,以运行多个任务。每个线程都有自己的连接(存储在类属性中)。

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连接字符串设置为公共静态是否安全可靠? 我使用的设计不是很好吗?

4 个答案:

答案 0 :(得分:2)

将其传递给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) { ... } }
}

每次创建new SqlConnection都可以在.NET中使用,因为有连接池。

答案 1 :(得分:1)

您应该使用相应的配置机制。对于应用程序/ Windows服务,这将是app.config文件,对于Web应用程序,它将是web.config文件,对于DLL,应将设置从DLL的app.config复制到应用程序的{ {1}}如此处所描述的多次(DLL不读取其配置文件,因此设置需要进入应用程序的配置文件)。

话虽如此:使用Visual Studio中的设置设计器简单地添加新的连接字符串设置。如有必要,也可以将其添加到其他项目中。

要使用同一项目中类的连接字符串,您只需使用app.config/web.config,假设该设置名为Settings.Default.MyConnectionString

DLL的另一个例外:某些DLL不需要自己的设置,但需要访问数据库。在这种情况下,您可以将连接字符串甚至MyConnectionString传递给需要数据库访问的函数。

答案 2 :(得分:1)

connection * string *和连接本身之间存在区别。对于connectionstring(描述你应该连接到的位置),你可以将它存储在一个配置文件中,这样你就可以轻松地改变它。

必须打开和关闭用于与数据库通信的连接本身。使用数据加载器时,通常不能对同时执行的命令使用相同的连接。 最好尽可能晚地打开新连接并尽快关闭它。让内置连接池来优化实际连接。

答案 3 :(得分:-1)

我喜欢你的答案,但在看了一段时间之后,我的设计很糟糕。所以我决定在MainService中创建一个公共静态查询函数:

public static void qQuery(string querystr){
    using(sqlconnection conn = new sqlconnection(sqlconnstr){
        .....
    }
}

sqlconnstr是MainService中的私有字符串,在服务启动时初始化。

我希望这是安全可靠的方式......