2011-06-24 2 views
0

このエラーメッセージが表示されます。varchar値 'monthDate'をデータ型intに変換すると、変換に失敗しました。varcharをmonthDateに変換する

私は、このSQL文があります。

String[][] results = lm.SqlSelect("SELECT COUNT(*) FROM members_ WHERE DATEPART(month, DateUnsub_) = 'monthDate' AND DATEPART(year, DateUnsub_) = 2011 AND DATEDIFF(day, DateJoined_, DateUnsub_) <= 30"); 

を、私は、その値が変化dateLookup値に応じて、ここではint型があります。

switch (dateLookup) 
     { 
      case "January": 
       monthDate = 01; 
       break; 
      case "February": 
       monthDate = 02; 
       break; 
      case "March": 
       monthDate = 03; 
       break; 
      case "April": 
       monthDate = 04; 
       break; 
      case "May": 
       monthDate = 05; 
       break; 
      case "June": 
       monthDate = 06; 
       break; 
      case "July": 
       monthDate = 07; 
       break; 
      case "August": 
       monthDate = 08; 
       break; 
      case "September": 
       monthDate = 09; 
       break; 
      case "October": 
       monthDate = 10; 
       break; 
      case "November": 
       monthDate = 11; 
       break; 
      case "December": 
       monthDate = 12; 
       break; 
     } 

を私の質問をされる - どこvarchar型から来ていますか?私がSQL文から "monthDate"変数を取り出し、それを数字05に置き換えると、すべて正常に動作します。

+0

これはすべて.aspx.csファイルで行われます。 –

答えて

2

'monthDate'のクエリ文字列は変数ではありません。私はそれが

String[][] results = lm.SqlSelect("SELECT COUNT(*) FROM members_ WHERE DATEPART(month, DateUnsub_) = " +monthDate + " AND DATEPART(year, DateUnsub_) = 2011 AND DATEDIFF(day, DateJoined_, DateUnsub_) <= 30"); 

いっそのことがより読みやすいかにするためにstring.Format()を使用することを検討すべきだと思います

は、SQLインジェクション攻撃から保護するためのコマンドをパラメータ化。

0

あなたのクエリは行数を選択するだけです。私はあなたのt - sqlのコードを見て何も選択していない。

プロパティを確認した後、次のコードを使用してください。

switch (dateLookup) 
    { 
     case "January": 
      monthDate = "01"; 
      break; 
     case "February": 
      monthDate = "02"; 
      break; 
     case "March": 
      monthDate = "03"; 
      break; 
     case "April": 
      monthDate = "04"; 
      break; 
     case "May": 
      monthDate = "05"; 
      break; 

など。英語では、あなたの番号の前後に引用符を入れてください。

+0

はい、1か月以内に購読したり購読を取り消した顧客の数を表示したいだけです。 –

+0

okですが、** dateLookup **および** monthDate **変数はどこにありますか?定義された場所を表示します。 – tugberk

+0

プライベート文字列dateLookup; 公開ストリングDateLookup { get {return dateLookup; } {dateLookup = value; } } 公開ストリングmonthDate; –

関連する問題