Frage

Wer weiß, wie man eine Excel-Datei (.xls) über OLEDB in C # schreiben? Ich mache folgendes:

   OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
   dbCmd.CommandTimeout = mTimeout;
   results = dbCmd.ExecuteNonQuery();

Aber ich erhalte eine OleDbException mit Meldung ausgelöst:

  

"Kann nicht das Design der Tabelle ändern   'Test $'. Es ist in einem Read-Only   Datenbank. "

Meine Verbindung scheint in Ordnung und ich kann Daten fein wählen, aber ich kann nicht scheinen, Daten in die Excel-Datei einfügen, weiß jemand, wie ich / Schreibzugriff auf die Excel über OLEDB-Datei gelesen werden?

War es hilfreich?

Lösung

Sie müssen ReadOnly=False; zu Verbindungszeichenfolge hinzufügen

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";

Andere Tipps

Ich war auch auf der Suche nach und Antwort, aber Zorantula Lösung nicht für mich arbeiten. Ich fand die Lösung auf http://www.cnblogs.com/ zwwon / Archiv / 2009/01/09 / 1372262.html

Ich entfernte die ReadOnly=false Parameter und die IMEX=1 erweiterte Eigenschaft.

Die IMEX=1 Eigenschaft öffnet die Arbeitsmappe in Importmodus, so strukturverändernde Befehle (wie CREATE TABLE oder DROP TABLE) nicht funktionieren.

Meine Arbeitsverbindungszeichenfolge ist:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"

Ich hatte auch das gleiche Problem. Nur entfernen Sie die erweiterte Eigenschaft IMEX=1. Das wird Ihr Problem lösen. Ihre Tabelle wird in Ihrer Excel-Datei erstellt werden ...

Ein paar Fragen:

  • Hat der Benutzer, die Ihre Anwendung ausführt (Sie?) Haben die Erlaubnis, in die Datei zu schreiben?
  • Ist die Datei schreibgeschützt?
  • Was ist Ihre Verbindungszeichenfolge?

Wenn Sie ASP verwenden, müssen Sie die IUSER_ * user wie in diese hinzufügen Beispiel .

  • Wie kann ich die Berechtigungen für für meine Anwendung in eine Excel-Datei zu schreiben (ich verwende Excel 2007)?
  • Die Datei gelesen wird, nicht nur, oder geschützt (meines Wissens).
  • Meine Verbindung String ist:
  

"Provider = Microsoft.Jet.OLEDB.4.0; Daten   Source = fifa_ng_db.xls; Mode = Readwrite; Erweiterte   Eigenschaften = \ "Excel   8,0; HDR = Ja; IMEX = 1 \ ""

Weitere Michael Haren Antwort. Das Konto, das Sie benötigen Berechtigungen Ändern auf die XLS-Datei zu gewähren, wird wahrscheinlich NETWORK SERVICE, wenn dieser Code in einer ASP.NET-Anwendung ausgeführt wird (es ist in dem IIS-Applikationspool angegeben ist). Um herauszufinden, was genau Konto Ihr Code ausgeführt wird, wie können Sie eine einfache tun:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);

Ich wurde unter ASP.NET ausgeführt wird, und traf auf beide "Kann das Design nicht ändern ..." und "Can not ISAM lokalisieren ..." Fehlermeldungen.

Ich fand, dass ich brauchte, um:

a ) Verwenden Sie die folgende Verbindungszeichenfolge:

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

Beachten Sie auch, ich hatte Probleme mit IMEX=1 und mit dem ReadOnly=false Attributen in der Verbindungszeichenfolge.

b ) Erteilen EVERYONE volle Berechtigungen für den Ordner, in dem die Datei geschrieben wurde. Normalerweise läuft ASP.NET unter dem Netzwerkdienstkonto, und dass bereits Berechtigungen hatte. Allerdings ist der OleDb Code nicht verwaltete, so muss es unter einem anderen Sicherheitskontext ausgeführt. (Ich bin derzeit zu faul, um herauszufinden, welche erklären, so habe ich nur JEDER.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top