1

我的设计习惯是让子窗体填充 SqlConnection 对象,显示子窗体,建立 SqlConnection 对象并将填充的对象传递回继续执行的父窗体。.NET 2.0 及更高版本 0 如下:

父表格

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();

}

由于这被编译成单个可执行文件(dll 访问修饰符被单独处理等......),让 sqlConnection 对象公开存在安全风险吗?有人可以在运行时获取信息吗?将登录信息传递给“主”表单的更好实施方式是什么?

4

1 回答 1

1

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

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

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

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

于 2010-03-01T14:11:16.073 回答