2012-01-20 12 views
-1

ASP.NET列名で列名として変数名を使用したいと思います。SQLの更新ステートメントASP.NETで変数を使用

私は次のエラーを取得しています:

Incorrect syntax near 'February'.

コードが

SqlConnection MyConn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\apptitude\projects\database\App_Data\Database.mdf;Integrated Security=True;User Instance=True"); 
     MyConn.Open(); 
     int i,n=5; 
     String[] month=new String[12]{"January","February","March","April","May","June","July","August","September","Octomber","November","December"}; 
     int day = DateTime.Now.Day; 
     int mon= DateTime.Now.Month; 
     Label1.Text = day.ToString(); 
     if (day==1) 
     { 
      //for(i=1;i<=n;i++) 
      //{ 
      //Label1.Text = "hi"; 
      int j = 1; 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = MyConn; 
      cmd.CommandText = "update Yearly_data set **'"+month[mon]+"'=20";** 
      i = cmd.ExecuteNonQuery(); 
      Label1.Text = i.ToString(); 
     } 
+0

アスタリスクとシングルクォーテーションは何ですか? – canon

+0

@antisanity - 私は、テキストを太字にするためにSOでフォーマットするときにアスタリスクが追加されたと推測しています。ただし、コードセグメントでは機能しません。ダブルアスタリスクが表示されます。 – Curt

答えて

3

ある年の毎月Yearly_dataでColumnNameにある場合は、その後にコードのあなたの行を変更します。

cmd.CommandText = "update Yearly_data set ["+month[mon]+"]=20"; 
+0

おかげで友人......... –

5

カラム名を一重引用符( ')で囲む必要はありません。したがって、この:

update Yearly_data set 'February'=20 

は、あなたが以下のようにコードを変更した場合、それは動作します

update Yearly_data set February=20 

ように記述する必要があります。

cmd.CommandText = "update Yearly_data set "+month[mon]+"=20"; 

しかし、動的SQLステートメントを構築することであることに注意してくださいSQL Injection attackであなたのアプリを危険にさらさないように慎重に行うべきことです。

1

すでに与えられた回答に加えて、フレームワークはDateTimeFormatInfo.GetMonthName機能を使用して月の名前を取得する方法を提供します。

static string GetMonthName(DateTime sourceDate) 
{ 
    var dateFormatInfo = new DateTimeFormatInfo(); 
    return dateFormatInfo.GetMonthName(sourceDate.Month); 
} 

cmd.CommandText = String.Format("update Yearly_data set {0} = 20", GetMonthName(DateTime.Now)); 
関連する問題