差し迫った問題は、接続文字列が正しくないか、データベースサーバーが利用できないことです。接続文字列は次のようになります
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;
を使用 および 実際の値に置き換えられます。
それに加えて、コードにはいくつかの問題があり、これが本番コードになることを意図している場合、そしておそらくこれが何かを学ぶための単なるおもちゃのプロジェクトである場合でも、間違いなくそれらを調べる必要があります。リストは特定の順序であり、包括的ではない場合があります。
- 接続文字列をハードコーディングしないでください。 代わりに、構成ファイルに移動します。
- 構成ファイルまたはソースコードにプレーンテキストのパスワードを含めないでください。 Windows認証、証明書
などのさまざまなソリューションがあります または
パスワードが保護されています Windows Data ProtectionAPI による 。 -
IDisposableを破棄するだけではいけませんIDisposable.Dispose()を呼び出すことによるインスタンス 。 代わりに、usingを使用してください 例外の場合でもリソースを解放するためのステートメント。 - 文字列操作技術を使用してSQLステートメントを作成しないでください。 代わりに、
SqlParameter> SQLインジェクション攻撃を防ぐため。 - プレーンテキストのパスワードをデータベースに保存しないでください。 代わりに、少なくともパスワードのソルトハッシュを保存し、MD5やメンバーではなく低速ハッシュ関数を使用します。 SHAファミリー。
-
IDbCommandを使用できます。 ExecuteScalarスカラー結果を取得し、データリーダーの使用を回避します。 - ブール値と
trueの比較 またはfalse冗長であり、コードにノイズを追加するだけです。if(reader.IsDBNull(0)==true)の代わりにif(reader.IsDBNull(0))を使用できます 。if(reader.Read()!=false)についても同じことが言えます。if(reader.Read()==true)と同等のもの したがって、if(reader.Read())。 - エンティティフレームワーク のようなO/Rマッパーを使用する 通常、SQLコマンドのレベルでデータベースを操作するよりも優先されます。