C# 将SqlConnection对象作为单个可执行文件的属性是否存在风险?

C# 将SqlConnection对象作为单个可执行文件的属性是否存在风险?,c#,sql,security,accessibility,sqlconnection,C#,Sql,Security,Accessibility,Sqlconnection,我有一个设计习惯,用子窗体填充SqlConnection对象,显示子窗体,建立SqlConnection对象,并将填充的对象传递回父窗体,然后继续执行。NET 2.0及以上0,如下所示: 父窗体: 登入表格: 由于这被编译成一个可执行文件(dll访问修饰符被单独处理等等),sqlConnection对象是否存在公共安全风险?有人能在运行时获取信息吗? 将登录信息传递到“主”窗体的更好实现是什么?由于.NET在内部维护a(除非关闭),因此您应该传递a,并在创建新连接时使用它。 这允许您通过为需要执

我有一个设计习惯,用子窗体填充SqlConnection对象,显示子窗体,建立SqlConnection对象,并将填充的对象传递回父窗体,然后继续执行。NET 2.0及以上0,如下所示:

父窗体:

登入表格:

由于这被编译成一个可执行文件(dll访问修饰符被单独处理等等),sqlConnection对象是否存在公共安全风险?有人能在运行时获取信息吗? 将登录信息传递到“主”窗体的更好实现是什么?

由于.NET在内部维护a(除非关闭),因此您应该传递a,并在创建新连接时使用它。
这允许您通过为需要执行的所有操作(例如,相对于批处理)创建新连接来保持连接信息的“线程安全”

连接在运行时没有被劫持的风险,因为这应该很好地捆绑到应用程序域中。(有办法,但那是另一种讨论)

它可能看起来效率很低,但由于后台池,传递连接字符串效果很好

所以,为了回答您的问题:实际上不存在安全风险,但存在线程安全风险,所以传递连接字符串而不是连接。这将使您的运行更加顺畅。
另外,请记住在处理完
SqlConnection
s和
SqlCommand
s之后,要将它们处理掉;)

由于.NET在内部维护a(除非关闭),因此您应该传递a,并在创建新连接时使用它。
这允许您通过为需要执行的所有操作(例如,相对于批处理)创建新连接来保持连接信息的“线程安全”

连接在运行时没有被劫持的风险,因为这应该很好地捆绑到应用程序域中。(有办法,但那是另一种讨论)

它可能看起来效率很低,但由于后台池,传递连接字符串效果很好

所以,为了回答您的问题:实际上不存在安全风险,但存在线程安全风险,所以传递连接字符串而不是连接。这将使您的运行更加顺畅。
另外,请记住在处理完
SqlConnection
s和
SqlCommand
s之后,要将它们处理掉;)

public SqlConnection sqlcon; //should be property but made it public for this example
public MainForm_Load(object sender, EventArgs e)
{
    Login frm = new Login(this);
    frm.ShowDialog();
    if (this.sqlcon == null)
    {   //no login
        this.Close();
    }
    //else, continue execution

}
Mainform parent;
public Login(RandomParade frm)
{
    InitializeComponent();
    parent = frm;
}

private void btnOK_Click(object sender, EventArgs e)
{
    //code to capture login details from textboxes
    //test connection       
    parent.sqlcon = new SqlConnection("connection string with login details here");
    this.Close();

}