Frage

Ich möchte einige Daten in einer Access-Datenbank einzufügen.

DataTable dt = new DataTable();
String sql = string.Format("SELECT * FROM {0} where 1=0; ", tmap.SqlTableName);
string con = string.Format(conn, accessPath);
OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(da);
da.InsertCommand = cmdBuilder.GetInsertCommand(true); // Returns "INSERT INTO test (int, bdate, amt, text, bit) VALUES (?, ?, ?, ?, ?)"
da.Fill(dt);
//Add data to the DateTable
for (int i = 0; i < rowCount; i++)
{
DataRow dr = dt.NewRow();
//....
dt.Rows.Add(dr);
}
da.Update(dt); //This is where things go south.

System.Data.OleDb.OleDbException
Nachricht: Syntaxfehler in der INSERT INTO-Anweisung
. Quelle:. Microsoft Jet Database Engine

Wenn ich den Einsatzbefehl ändern:

da.InsertCommand = new OleDbCommand("INSERT INTO test ([text]) VALUES (?)");  

und die eingehenden Daten ändern, um nur einen einzelnen Textwert habe ich bekommen:

keinen Wert angegeben für einen oder mehrere erforderlichen Parameter.

Bin ich etwas fehlt?

War es hilfreich?

Lösung

Das Problem war in den Datentypen. Der Code in der Frage funktioniert, wenn die Datentypen kompatibel sind.

Andere Tipps

  1. Stellen Sie sicher, dass alle erforderlichen Spalten in der INSERT-Abfrage enthalten sind.
  2. Wenn es nicht funktioniert, dann eine neue Methode erstellen zum Einfügen und folgt diese:

    OleDbConnection conn = new OleDbConnection (Connection);

    OleDbCommand command = new OleDbCommand();
    command.Connection = conn;
    command.CommandText= "INSERT INTO myTable (col1, col2) VALUES (@p_col1, @p_col2)";
    command.Parameters.Add ("@p_col1", OleDbType.String).Value = textBox1.Text;
    ...
    command.ExecuteNonQUery();
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top