Есть ли риск иметь объект SqlConnection в качестве свойства для одного исполняемого файла? - PullRequest
1 голос
/ 01 марта 2010

У меня есть привычка к дизайну, чтобы объект 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 общедоступным с точки зрения безопасности?Может ли кто-нибудь забрать информацию во время выполнения?Что может быть лучше для передачи информации для входа в форму «Main»?

1 Ответ

1 голос
/ 01 марта 2010

Поскольку .NET поддерживает пул соединений внутри (если не выключен), вместо этого вы должны передавать строку соединения и использовать ее при создании новых соединений. Это позволяет сохранять информацию о соединении «поточно-безопасной», создавая новое соединение для всего, что вам нужно сделать (например, относительно пакета).

Нет риска перехвата соединения во время выполнения, поскольку все это должно быть аккуратно связано в домен приложения. (Есть способы, но это другое обсуждение).

Это может показаться очень неэффективным, но из-за фонового объединения передача строки подключения работает отлично.

Итак, чтобы ответить на ваш вопрос: на самом деле нет угрозы безопасности, но есть риск для безопасности потоков, поэтому вместо соединения используйте строку подключения. Это станет для вас более гладким.
Кроме того, не забудьте утилизировать ваши SqlConnection s и SqlCommand s, когда вы закончите с ними;)

...