1

現在、私は C# と SQL に関するプロジェクトに取り組んでおり、SELECT 関数に関する問題があり、オンラインで解決策を見つけることができません。

シナリオは、SQL サーバーを介して C# からクエリを検索し、その結果を C# のデータ グリッド ビューに表示することです。

Visual Studio 2008 と SQL Server Studio 2008 を使用しています。

プロジェクトを開始する前に、Visual Studio から簡単な Windows フォームを作成し、datagridview、2 つのテキスト ボックス、検索ボタンを作成しました。

SQL Server にはテーブル DVD を含むデータベースがあり、この Windows フォームから DVD ID と名前で検索したいと考えています。

DVD ID から始めて、次のコードを実装しました。

private void btnView_Click(object sender, EventArgs e)
{
   SqlConnection c = new SqlConnection(@"Data Source=GILBERTB-PC\SQLEXPRESS;Initial Catalog=DVDandGameBooking;Integrated Security=True"); 

   DataTable t = new DataTable();

   string sqlString = "SELECT * From DVD where Id ='" + txtID.Text+ "'";

   SqlDataAdapter dt = new SqlDataAdapter(sqlString, c);        
   dt.Fill(t);

   dtgv1.DataSource = t;
}

そしてそれはうまくいきました:)

次に、コードを次のように変更しました

string sqlString = "SELECT * From DVD where Name ='" + txtName.Text+ "'";

DVDの名前で検索できるようにしました、プログラムを起動して名前で検索すると、空白のデータベースが表示されました

また、ID または Name で検索できるようにコードを変更する方法はありますか?

あなたの助けと時間をありがとう

4

2 に答える 2

2

または、次のようなパラメータで SQLCommand を使用できます。

SqlConnection c = new SqlConnection(@"Data Source=GILBERTB-PC\SQLEXPRESS;Initial Catalog=DVDandGameBooking;Integrated Security=True");
string queryString = "SELECT * From DVD where Id = @id";
var paramId = new SqlParameter("id", SqlDbType.VarChar);
var query = new SqlCommand(queryString, c);
query.Parameters.Add(paramId);

本当に SQLDataAdapter を使用したい場合は、選択コマンドを上で書いたものに設定できます。それ以外の場合は、dataReader を使用して結果を反復処理できます。

また、このようなパラメーターを使用すると、クエリが読みやすくなり、SQL インジェクションに対してより安全になります。常に考慮する必要があります。

Edit1: ID または名前のいずれかで検索する場合は、2 つのパラメーターを作成し、2 つの間に を配置して、クエリの代わりにORキーワードを使用することができます。値が になる可能性がある場合は、そうでない値に応じて、クエリを動的に作成することをお勧めします。like=nullnull

于 2012-05-31T02:06:26.303 に答える