Ich brauche einen workaround für den Excel-Raten-Daten-Typen problem
Ich bin momentan dabei, ein Hilfsprogramm zum importieren von Daten aus Excel nach Oracle-Datenbank,
Habe ich eine Feste Vorlage für die excel-Datei,
Nun, wenn ich versuche, die Daten zu importieren Jet-provider und ADO.Net - Ole-Verbindung-tools, fand ich das folgende problem: es sind einige Spalten wurden noch nicht importiert, da gibt es gemischte Datentypen in Ihre Spalten [string " und " number],
Suchte ich nach diesem problem im internet habe ich den Grund gefunden ist raten Datentypen von Excel
Den load code:
connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0};Extended Properties=Excel 8.0;");
string columns = "P_ID, FULL_NAME_AR, job_no, GENDER, BIRTH_DATE, RELIGION, MARITAL_STATUS, NAT_ID, JOB_Name, FIRST_HIRE_DATE, HIRE_DATE, CONTRACT_TYPE, GRADE_CODE, QUALIFICATION";
string sheetName = "[Emps$]";
OleDbCommand command = new OleDbCommand(string.Format("select {0} from {1} where p_id is not null", columns, sheetName), connection);
connection.Open();
dr = command.ExecuteReader();
DataTable table = new DataTable();
table.Load(dr);
Was soll ich tun, sagen Sie Excel BEENDEN zu ERRATEN und geben Sie mir die Daten als Text ?
wenn es nicht, können Sie mir helfen mit irgendwelche workarounds ?
Vielen Dank im Voraus
- Wie Sie den Import der Datensätze von excel zu oracle? code bitte? wo scheitert es?
- Können Sie nicht einfach die gesamte Spalte als text in Excel?
- shahkalpesh: Es bedeutet nicht, werfen eine Ausnahme, es ignoriert die text-Daten, weil es erraten Sie den Datentyp für die Spalte Anzahl von den ersten 8 Datensätzen und gibt null zurück, für die nicht numerischen Werte
- Danke. Kannst du etwas code, den Sie zum Lesen von Daten aus excel?
- Die übliche Abhilfe für dieses ist, erstellen Sie die leere Ziel-Tabelle und importieren Sie Sie in das, anstatt die Tabelle jedes mal, wenn Sie führen Sie den import. So haben Sie die volle Kontrolle über den Ziel-data-Typen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fand eine Lösung durch hinzufügen von IMEX=1 für die Verbindungszeichenfolge, aber es gibt ein spezielles format für das es die descriped in den folgenden link.
Hinsichtlich
Dies ist nicht ganz richtig! Offenbar Jet/ACE IMMER davon ausgegangen, ein string-Typ, wenn die ersten 8 Zeilen leer sind, unabhängig von IMEX=1, und verwendet immer einen numerischen Typ, wenn die ersten 8 Zeilen sind zahlen (wieder, unabhängig von IMEX=1). Auch wenn ich die gelesenen Zeilen auf 0 in der Registrierung, ich hatte immer noch das gleiche problem. Dies war der einzige Weg, um sicherzustellen, dass es funktioniert:
Kannst du aus der excel-Ende? In diesem Beispiel führen Sie in Excel setzen gemischte Daten tyoes in eine SQL-Server-Tabelle:
Ist eine alternative Lösung zum hinzufügen oder ändern der Einstellung TypeGuessRows in der registry. Durch setzen seinen Wert auf 0, wird das komplette Dokument gescannt wird.
Leider die Einstellungen finden Sie an verschiedenen Standorten in der Registrierung, je nach dem welche Bibliotheken und Versionen von Ihnen, das Sie installiert haben.
Zum Beispiel:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel]
"TypeGuessRows"=dword:00000000
Dies wird auch verhindern, dass das abschneiden von Text-Daten länger als 255 Zeichen ist. Dies geschieht, wenn Sie eine Nummer für TypeGuessRows, die größer als 0 und der erste text länger als 255 Zeichen tritt darüber hinaus Anzahl.
Siehe auch Einstellung TypeGuessRows für excel-ass-Treiber.