2017-05-04 62 views
-1
public static void WriteData(string colName,string data) 
{ 
    using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\"")) 
    { 
     // string query = String.Format("INSERT INTO [DataSet$]({0}) VALUES ({1})",colName, data); 

     string query = String.Format("INSERT INTO [DataSet$]({0}) VALUES ({1})", colName, data); 
     cn.Open(); 
     OleDbCommand cmd = new OleDbCommand(query, cn); 
     cmd.Parameters.AddWithValue("@colName", colName); 
     cmd.Parameters.AddWithValue("@data", data); 

     cmd.ExecuteNonQuery(); 
     cn.Close(); 
     cn.Dispose(); 
    } 
} 
+0

私はあなたが何を求めているのかわかりませんが、そのままのコードはSQLインジェクション攻撃に対して脆弱であることに注意してください。 – AKX

+0

シートにデータを挿入することができず、上記の例外がスローされています。 – darsi567

+0

私はc#とsqlを初めて使用しています。いずれかの上記の構文エラーで助けてください? – darsi567

答えて

0

動的クエリ生成とクエリーパラメータのミキシングを実行しようとしています。 コマンドパラメータを使用して、クエリの列名を設定することはできません。パラメータは、クエリに値を渡すためにのみ使用されます。

string.Formatをクエリに使用するには、クエリにデータを渡すためにのみコマンドパラメータを使用します。

public void WriteData(string colName, string data) 
{ 
    using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\"")) 
    { 
     string query = string.Format("INSERT INTO [DataSet$] ({0}) VALUES (@data)", colName); 
     // The query variable will have following value assuming colName=token 
     //INSERT INTO [DataSet$] (token) VALUES (@data) 
     cn.Open(); 
     //Now use OleDbCommand to pass value of @data to the query. 
     OleDbCommand cmd = new OleDbCommand(query, cn); 
     cmd.Parameters.AddWithValue("@data", data); 

     cmd.ExecuteNonQuery(); 
     cn.Close(); 
    } 
} 

これは、問題の解決に役立ちます。

+0

Chetanにご返信ありがとうございます。あなたは私にもテーブルを更新する方法を教えてもらえますか? – darsi567

+0

は、rowname、colname、およびデータが挿入されます。 – darsi567

+0

ここにrownameとは何ですか?更新する列が複数ありますか?既にいくつかのコードを試しましたか?このソリューションはINSERT操作のために機能しましたか? –

0
public static void UpdateData(string keyName,string colName,string data) 
    { 
     using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\"")) 
     { 
      // string query = String.Format("INSERT INTO [DataSet$]({0}) VALUES ({1})",colName, data); 

       connection.Open(); 
       string commandString = String.Format("UPDATE [DataSet$] SET colName ='{0}' WHERE keyName = '{1}'",@data,@keyName); 
       OleDbCommand cmd = new OleDbCommand(commandString, connection); 
      cmd.Parameters.AddWithValue("@data", data); 
      cmd.Parameters.AddWithValue("@keyName", keyName); 
      connection.Close(); 
       connection.Dispose(); 
      } 
     } 
    } 
+0

あなたは私の答えと同じアプローチに従う必要があります。 string.formatを使用して列名とコマンド・パラメーターを入力し、値を入力します。 –

+0

ここにキー名は何ですか?それは列名ですか?それに価値がある必要があります。これを行う必要があるユースケースについて説明できますか?このコードには、最初のコードと同じ問題があります。 –

+0

keyname、colname、およびdataのサンプル値を共有できますか? –

関連する問題