2011-02-08 9 views
0

を使用してワークシートをエクセルへの書き込み時に、私はVB.net 2005エラーvb.net

操作は

更新可能なクエリを使用する必要がありますを使用してExcelワークシートに書き込もうとしていたとき、私は、エラーメッセージを取得しています

私はS/Oの検索結果を確認しました
https://stackoverflow.com/search?q=Operation+must+use+an+updateable+query
私の問題を解決していません。

私のコードは次のとおりです。

Dim strXLScn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & xlsFilePath.Text & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" 

     Dim XLConn As New OleDb.OleDbConnection(strXLSconn) 
     Dim XLcmd As New System.Data.OleDb.OleDbCommand 
     Dim sSQLWriteToExcel As String 

     strExcel = "INSERT INTO [Sheet1$A1:A1] Values ('" & sCity & "')" 

     Dim oleCMD As New OleDb.OleDbCommand(strExcel, XLConn) 
     Dim oleDA As New OleDb.OleDbDataAdapter(oleCMD) 

     XLConn.Open() 
     XLcmd.Connection = XLConn 

     XLcmd.CommandText = strExcel 
     XLcmd.ExecuteNonQuery() 
     XLConn.Close() 

任意のアイデア?

+0

次回は、おそらく最初にc#が適合するか検索したいと考えています。 – Fionnuala

答えて

1

最初にまずOption Explicitをオンにしてください。これは、宣言していない変数を使用する際に役立ちます。次に、接続文字列の最後からIMEX = 1を削除します。第3に、Excel文書にヘッダー行があることを確認します。このコードは、私の仕事:

 Dim strXLScn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""C:\Temp\test.xls"";Extended Properties=""Excel 8.0;HDR=Yes""" 

    Dim XLConn As New OleDb.OleDbConnection(strXLScn) 
    Dim XLcmd As New System.Data.OleDb.OleDbCommand 
    Dim strExcel As String 
    Dim sCity As String = "Sydney" 
    strExcel = "INSERT INTO [Sheet1$] Values ('" & sCity & "')" 

    Dim oleCMD As New OleDb.OleDbCommand(strExcel, XLConn) 
    Dim oleDA As New OleDb.OleDbDataAdapter(oleCMD) 

    XLConn.Open() 
    XLcmd.Connection = XLConn 

    XLcmd.CommandText = strExcel 
    XLcmd.ExecuteNonQuery() 
    XLConn.Close() 
+0

ReadWriteが有効になっていることを確認することは可能ですか?私は、ファイルのインスタンスがReadOnlyモードであると感じています。 – user279521

0

(AppoligiesこれはむしろC#、VBではありません。しかし、私はそれが簡単で、もう1つはVBに簡単に変換することができるはずは十分に短いだと思います。)私が見つけた

この記事は他にもいくつか役立ちます。ここに私が思いついたことがあります。それはVS2010で動作します。

Excelワークシートにヘッダーがあることに注意してください。したがって、接続文字列では "HDR = Yes"となります。

ここでは、C#で文字列を書式設定する方法を示します。

"INSERT INTO [代理店]、[ストリート1]、[ストリート2]、[市]、[郵便番号]の文字列変数(代理店)と構造(住所)を使用します。 [住所コード] + Address.Street1.Replace( "'"、 "' '")+ Address.Street2.Replace( " ( "'"、 "' '")+ "。") "+"

シートが呼び出されていること( "List of Agencies")、各フィールド/ヘッダー( "リスト")、 "[Agency]"など)はカッコで囲まれ、String.Replaceメソッドは埋め込まれた一重引用符(ダニ)を処理するために使用されます。

乾杯!

public void InsertExcelData(String fileName, String sqlString) 
{ 
    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;\";"; 

    OleDbConnection connection = new OleDbConnection(connectionString); 

    OleDbCommand command = new OleDbCommand(connectionString, connection); 

    command.CommandText = sqlString; 

    // Connect to the worksheet 
    connection.Open(); 

    // Do the Insert 
    command.ExecuteNonQuery(); 

    // Clean up 
    connection.Close(); 
    connection.Dispose(); 
}