2016-07-28 13 views
0

おはようございます!私は以下のコードで見られるようなパラメータを使って動的クエリを構築しています。パラメータとして動的クエリでgetdate()を渡す

 c.Open(); 
       string columns = "("; 
       string values = "("; 
       foreach (DataGridViewColumn column in rootDataView.Columns) 
       { 
        if (virtualColumns.Contains(column.Name)) 
        { 
        } 
        else 
        { 
         columns += column.Name + ","; 
         values += "@" + column.Name + " ,"; 
        } 
       } 
       columns = columns.Substring(0, columns.Length - 1) + ")"; 
       values = values.Substring(0, values.Length - 1) + ")"; 
       SqlCommand command = new SqlCommand("insert into " + tableName + " " + columns + " Values " + values, c); 
       foreach (DataGridViewColumn column in rootDataView.Columns) 
       { 
        if (virtualColumns.Contains(column.Name)) 
        { 
        } 
        else 
        { 
         if (column.Name != "timeFrom") 
         { 
          command.Parameters.AddWithValue("@" + column.Name, editedRow.Cells[column.Name].Value); 
         } 
         else 
         { 
          command.Parameters.AddWithValue("@" + column.Name, System.DateTime.Now); 
         } 
        } 
       } 
       command.ExecuteNonQuery(); 

しかし、私は、この行に問題が発生した

command.Parameters.AddWithValue("@" + column.Name, System.DateTime.Now); 

私は、SQLサーバーと、この時刻を同期する必要があるので、私はこのようにそれを入力したときに、私は何とかパラメータとしてGETDATE()に合格する必要がありますが、

command.Parameters.AddWithValue("@" + column.Name, "GetDate()"); 

機能を呼び出さないように文字列/ varcharとして送信されています。

パラメータとして関数を渡す方法があるか、またはクエリ文字列の@timeFrom部分を置き換える必要があるかどうかを知りたいと思います。

EDIT:太字の部分に注意してください、それが問題だ -

+0

「GetDate()」を直接クエリに貼り付けてみませんか?私はパラメータなしで意味する。 – Mikey

+0

パラメータの有無に応じて異なるコマンドテキストを作成する必要があります。 – Serg

+0

私が記述した方法が存在するかどうかを知りたいが、アプローチはあまりにも機能する。 @Mikey –

答えて

2

あなたはこのような何かしようとする必要がありますなぜ私がはい/いいえを求めていますとの説明:基本的に

  c.Open(); 
      string columns = "("; 
      string values = "("; 
      foreach (DataGridViewColumn column in rootDataView.Columns) 
      { 
       if (virtualColumns.Contains(column.Name)) 
       { 
       } 
       else 
       { 
        columns += column.Name + ","; 
        if (column.Name != "timeFrom") 
        { 
         values += "@" + column.Name + " ,"; 
        } else { 
         //change in string 
         values += "GETDATE() ,"; 
        } 
       } 
      } 
      columns = columns.Substring(0, columns.Length - 1) + ")"; 
      values = values.Substring(0, values.Length - 1) + ")"; 
      SqlCommand command = new SqlCommand("insert into " + tableName + " " + columns + " Values " + values, c); 
      foreach (DataGridViewColumn column in rootDataView.Columns) 
      { 
       if (virtualColumns.Contains(column.Name)) 
       { 
       } 
       else 
       { 
        if (column.Name != "timeFrom") 
        { 
         command.Parameters.AddWithValue("@" + column.Name, editedRow.Cells[column.Name].Value); 
        } 
       } 
      } 
      command.ExecuteNonQuery(); 

を、パラメータとしてtimeFromを扱うのではなく、GETDATE()を使用してINSERTの値を設定します。

SQL Serverおよび使用しているクライアントライブラリでは、SQLを含むパラメータの受け渡しをサポートしていません。つまり、この構築物は動作しません理由です:

command.Parameters.AddWithValue("@" + column.Name, "GetDate()"); 

AddWithValueに渡すことが許可されている唯一のものはリテラルSQL値に変換しますものです。

+0

行はこの 'values + =" GETDATE()、 ";'のように書かれなければならないが、私はyes/noと説明を要求していた。 –

+0

@Hynek、あなたは欠けているカンマについて正しい。私は説明を加えました。もっと必要な場合は教えてください。 –

関連する問題