このコード行には、いくつか問題があります。
textbox2.Text ="Found "+ count+" Members;
まず、構文エラーがあります。2番目の引用符のセットを閉じることはありません。あなたはこのようにします:
textbox2.Text ="Found "+ count+" Members";
ただし、このような文字列の連結はまだ少し厄介です。2つのリテラル文字列があり、それらを整数に追加しようとしていますが、これは完全に直感的ではありません(おそらく、必要以上に遅くなります)。代わりに、フォーマット文字列の使用を検討してください。
textbox2.Text = string.Format("Found {0} Members", count);
これにより、count
(整数である)から値が取得され、string.Format()
関数の内部でその文字列表現が識別され、フォーマットされた文字列のプレースホルダーに挿入されます。
更新:コンパイル時のエラーを処理します。これで、実行時エラーが発生します。
SqlCommand comm = new SqlCommand("SELECT COUNT(*) FROM Members where sponser = "
+textbox1.text+"'", connection);
そのSQLステートメントを実行しようとするとすぐに、結果のクエリに構文エラーがあるため、データベースからエラーが発生します。
SELECT COUNT(*) FROM Members where sponser = some text'
パラメータの最初の単一引用符がありません。このようなもの:
SqlCommand comm = new SqlCommand("SELECT COUNT(*) FROM Members where sponser = '"
+textbox1.text+"'", connection);
ただし、これは重要ですが、まだ完了していません。このコード行は、SQLインジェクションと呼ばれる非常に一般的で簡単に悪用可能な脆弱性に対して広く開かれています。直接の文字列連結から離れて、SQLクエリにパラメータを使用することをお勧めします。このようなもの:
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Members where sponser = @sponser");
cmd.Parameters.Add("@sponser", textbox1.text);
Int32 count = (Int32)comm.ExecuteScalar();
これを改善するためにできることはまだたくさんあることを知ってください。これはすべて、時間をかけて学ぶ価値があります。調べることができるものは次のとおりです。
textbox1.text
SQLクエリで使用する前に、ユーザー入力()をチェックして検証します。
comm.ExecuteScalar()
に直接キャストしようとする前にの出力を確認しますInt32
(これにより、何らかの理由で整数以外のものが返される場合、ランタイムエラーが発生します)。
- ADO.NETコンポーネントの代わりにLinqtoSqlのようなものを使用することを検討してください。これにより、コードが少なくて済みます。