Frage

Wir versuchen, Daten in eine Klipper Datenbankdatei (DBF-Datei mit NTX-Index-Datei) einzufügen.

Für eine Vielzahl von Gründen, können wir nicht das Datenbankformat geändert werden.

Wir haben im Moment sehen zwei Probleme:

  1. Mit unserem vorhandenen Code, sind wir zu aktualisieren oder nutzen die NTX-Index-Datei nicht in der Lage (glaube ich). Wir möchten in der Lage sein, dies zu tun. Kennen Sie ein OLE-oder ODBC-Treiber, die dies tun können?

  2. Wir sind in der Lage, eine Zeile in die Klipper-Datenbankdatei (DBF), so lange ein, wie wir sind kein Datum. Wenn wir ein Datum, in jedem Format umfassen, erhalten wir einen Fehler.

Einige Beispielcode:

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=dBASE IV");
string sql = "insert into TABLE (E, J, DATE, STARTTIME, ENDTIME) values ('1', '2', '2010-01-13' ,'08:12:12', '18:12:12')";

  OleDbCommand myCommand = new OleDbCommand(sql);
  myCommand.Connection = con;
  con.Open();
  myCommand.ExecuteNonQuery();
  myCommand.Connection.Close();

und die Ausnahme ist so etwas wie:

01/15/2010 12:50:31 {ERROR} ASITranslator.GUI.ASITranslatorGUI.insertSCH - Error in: Syntax error in INSERT INTO statement.-- StackTrace:    at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

Auch ohne die DATE-Spalte, es funktioniert gut.

Gibt es einen besseren Anbieter verwenden für Clipper-Dateien (die Anbieter für andere DBF-Dateien funktioniert gut).

Irgendwelche Ideen?

War es hilfreich?

Lösung

Es scheint, das Problem in erster Linie auf die OLE DBF verwendet / dBase-Treiber ist nicht mit dem Clipper nativen Format schreiben, das ist eine modifizierte Version von dBase III.

Um Schreiben zu dem Clipper-Format, diese Zeichenfolge Bedürfnisse verwendet werden:

Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Extended Properties="CollatingSequence=ASCII;DBQ=C:\DATA\8110FULL;DefaultDir=C:\DATA\8110FULL;Deleted=1;Driver={Microsoft dBase Driver (*.dbf)};DriverId=21;FIL=dBase III;FILEDSN=C:\Program Files\Common Files\ODBC\Data Sources\test.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=600;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;UserCommitSync=Yes;";Initial Catalog=C:\DATA\8110FULL

Dies wird in die Datei zu schreiben lassen, einschließlich des Datumsformats.

Dies ist jedoch verwendet nicht die NTX-Index-Dateien (noch es sie nicht aktualisiert). Dafür scheint es, dass wir die Code-Basis (oder ähnlich) Clipper-Treiber verwenden müssten.

Andere Tipps

Zunächst scheint es, Sie versuchen, hinzuzufügen, ‚Textwerte‘ für die Datumsspalten unabhängig von ihnen in einem Datumsformat zu sein. Zusätzlich in webbasierten Anwendungen verwendet, wenn, wo würden Sie Variablen verwenden, dann würden Sie am besten parametrisierte Abfragen zu verwenden.

String sql = "insert into YourTable ( fld1, fld2, DateFld1, DateFld2 ) "
  + "value ( ?, ?, ?, ? )";

OleDbCommand myCommand = new OleDbCommand(sql); 

OleDbParameter NewParm = new OleDbParameter( "parmFld1", 1 );
NewParm.DbType = DbType.Int32;
myCommand.Parameters.Add( NewParm );

NewParm = new OleDbParameter( "parmFld2", 2 );
NewParm.DbType = DbType.Int32;
myCommand.Parameters.Add( NewParm );

NewParm = new OleDbParameter( "parmDate1", DateTime.Now );
NewParm.DbType = DbType.DateTime;
myCommand.Parameters.Add( NewParm );

NewParm = new OleDbParameter( "parmDate2", DateTime.Now );
NewParm.DbType = DbType.DateTime;
myCommand.Parameters.Add( NewParm );

Dann weiter mit Ihrer Verbindung, öffnen, auszuführen und zu schließen ...

DSN Verbindung: (Beachten Sie den Treiber und die FIL-String geändert, was in Windows 7 genannt) Es verwendet Microsoft OLE DB-Provider für ODBC-Treiber (MSDASQL). Der Code verwendet, um den .NET Framework-Datenanbieter für ODBC (System.Data.Odbc), Nicht der .Net Framework-Datenanbieter für OLE DB (System.Data.OleDb). Typ Clipper N-> OdbcType Doppel

 "Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Extended Properties=\"CollatingSequence=ASCII;DBQ=F:\\Folder;DefaultDir=F:\\Folder;Deleted=1;DRIVER=Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx);DriverId=21;FIL=dBASE III;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=600;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;UserCommitSync=Yes;\";Initial Catalog=F:\\Folder";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top