2012-04-12 2 views
0

私はdataGridViewにデータを選択して年と月に配置できるC#でプログラムを作成しています。年の部分は簡単です。私は、コンボボックスから年を選択して、私はこのクエリを実行します。データ型 "date"のmonthを選択するにはどうすればいいですか?

"SELECT * FROM table WHERE YEAR(date) = '" + year_comboBox.Text + "'"; 

、データベース内の年の形式は、それがすべて正常に動作し、等々2010年、2011年、2012年ですので。しかし、数ヶ月になると、1月、2月、3月などのように私のコンボボックスに入っていて、データベースの形式は01,02,03などです。したがって、別の種類のクエリが必要になるか、私は1月、2月と他の月の文字列を01,02などに変換することができるようにコードを書くことができます。これはコード効率が良くありません。

私の月の文字列を変換せずに入力しなくてもこの作業を行うことができる単純なタイプのクエリはありますか?

+0

SQLインジェクションに注意してください。http://xkcd.com/327/ – albertjan

+0

SQLインジェクションを防ぐために、パラメータ化されたクエリを使用する必要があります。C#でこれを行う方法の例を次に示します。http://www.dotnetperls.com/sqlparameter あなたが持っているものが問題である理由の例として、 ''; drop table table; - '年のボックスと大混乱。 –

答えて

2

あなたはDateTime.ParseExactメソッドを使用したDateTimeに文字列として月の名前を変換することができます:

var monthString = DateTime.ParseExact("April", "MMMM", System.Globalization.CultureInfo.InvariantCulture).Month.ToString("00"); 

上記のコードは割り当てられます 『monthStringに04を』

+0

ありがとうございます。それはコードの1つの地獄です。 – Alternatex

2

1月、2月、3月などのテキストに加えて、各レコードの値が,1,2,3などのようにコンボボックスを変更できると思います。あなたの月のクエリで使用するSQLの値。

(私は、ドロップダウンリストで、間違ったと紛らわしいコンボボックスかもしれません。しかし、あなたの年のテストでは、あなたがyear_comboBox.Textを使用していることに気付く。類似Valueフィールドがあるとすれば、それは月の値を設定するために使用します。)

0
string query = @"SELECT * FROM table WHERE MONTH(date) = '" + DATEPART(mm,CAST(month_combobox+ ' 1900' AS DATETIME)) + "'"; 

数字から月の名前を得ることができます。 ( 'またはわからない」)

関連する問題