1

SqlConnectionオブジェクトに子フォームを入力し、子フォームを表示し、SqlConnectionオブジェクトを確立し、入力したオブジェクトを親フォームに戻して実行を続行するという設計習慣があります。.NET2.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 は接続プールを内部的に維持するため (オフに切り替えない限り)、代わりに接続文字列を渡し、新しい接続を作成するときにこれを使用する必要があります。
これにより、実行する必要があるすべてのことに対して新しい接続を作成することで、接続情報を「スレッド セーフ」に保つことができます (たとえば、バッチに関連して)。

実行時に接続がハイジャックされるリスクはありません。これはすべて、アプリケーション ドメインに適切にバンドルされている必要があるためです。(方法はありますが、それは別の議論です)。

非常に非効率に見えるかもしれませんが、バックグラウンド プーリングにより、接続文字列の受け渡しがうまく機能します。

したがって、あなたの質問に答えるには、実際にはセキュリティ上のリスクはありませんが、スレッドの安全性にはリスクがあるため、接続の代わりに接続文字列を渡します。これにより、よりスムーズに実行できます。また、使い終わったらと
を破棄することを忘れないでください;)SqlConnectionSqlCommand

于 2010-03-01T14:11:16.073 に答える