2012-03-16 6 views
0

"1つ以上の必須パラメータに値が指定されていません"というエラーが表示されます。以下のコードのExceuteNonQuery()行。Excelでカラムを更新するときにOledb例外を取得する

 System.Data.OleDb.OleDbConnection finalConnection; 
     System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(); 
     string sql = null; 
     finalConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source ='c:\\temp\\test.xlsx'; Extended Properties ='Excel 12.0 Xml;HDR=NO';"); 
     finalConnection.Open(); 
     myCommand.Connection = finalConnection; 
     foreach (VinObject v in VinList) 
      { 
      sql = "Update [Sheet1$] set O = ? where S = ?;"; 
      myCommand.Parameters.Add(new OleDbParameter("@amt", v.CostNewAmt)); 
      myCommand.Parameters.Add(new OleDbParameter("@vin", v.VIN)); 
      myCommand.CommandText = sql; 
      myCommand.ExecuteNonQuery(); 
      } 
     finalConnection.Close(); 

また、同じエラーが発生するたびに別のコマンドを使用してみました。

foreach (VinObject v in VinList) 
      { 
      using (OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source ='c:\\temp\\test.xlsx'; Extended Properties ='Excel 12.0 Xml;HDR=No';")) 
       { 
       con.Open(); 
       string query = @"UPDATE [Sheet1$] SET O = ? WHERE S = ?"; 
       OleDbCommand cmd = new OleDbCommand(query, con); 
       cmd.Parameters.AddWithValue("@param1", v.CostNewAmt); 
       cmd.Parameters.AddWithValue("@param2", v.VIN); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
       } 
      } 

私はINSERT INTOことを変更し、新しいExcelスプレッドシートに挿入することですが、私の人生は、このアップデートは仕事を得ることができないため。私が間違って何をしているのか?助けてくれてありがとう。

+0

あなたは、個々の文のための新しいコマンドを必要としませんか?または少なくとも、Parametersコレクションをリセットしますか? –

+0

ヒント:foreach内の 'sql'の値は何ですか?これは有効なクエリのようですか? –

+0

@ValAkkapeddiそれは最初の1つを爆撃し、質問は悲しいことに私のエラーを修正しなかったその点 –

答えて

1

Excelが列文字の別名「O」と「S」を認識しないので、あなたは、エラーを取得しています。最初の入力行のセルの値である実際の列「名前」が必要です。そこにそのセル内の有効な値ではありませんか、あなたは、接続文字列でHDR=NOを指定した場合は、列がF1F2 ... Fnという名前になります。推定される列名がわからない場合は、OleDbConnection.GetSchema(String,String[])またはOleDbDataReader.GetName(Int32)を使用して名前を調べてください。

あなたは、接続文字列でHDR=NOを指定しているので、あなたの正しいSQLは、おそらく今後の参考のために

"Update [Sheet1$] set F15 = ? where F19 = ?;" 

なり、チェックアウト:

+0

で有効ですが、私は "Fn"値で文字を置き換えると、私はまだ同じエラーが発生します。その他のアドバイスは?ありがとう –

+0

@IsaacLevin OleDbConnection.GetSchemaまたはOleDbDataReader.GetNameを使用して実際の列名を調べましたか?書類は私のポストにリンクされています –

+0

提出日はどうですか?私は[$ -1010409] mm/dd/yyyy形式の日付列を持っていて、これをstringのようなwhere節に入れようとしたときに、selectString = "Update [Sheet1 $] set SCIN_ATTEND_CODE = 'P'、SCIN_INVOICE_DAYS = 09/09/09 ";それは認識できず、何も更新しませんでした。私は日付の前後に ''を追加しようとしましたが、データ型の不一致のエラーが発生します。 –

関連する問題