Domanda

Vorrei inserire alcuni dati in un database di Access.

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
Messaggio: Errore di sintassi nell'istruzione INSERT INTO
. Fonte:. Microsoft Jet Database Engine

Se cambio il comando di inserimento:

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

e modificare i dati in ingresso di avere solo un singolo valore di testo ottengo:

Nessun valore specificato per uno o più parametri obbligatori.

Mi sto perdendo qualcosa?

È stato utile?

Soluzione

Il problema era i tipi di dati. Il codice in questione funziona se i tipi di dati sono compatibili.

Altri suggerimenti

  1. Assicurati che tutte le colonne necessarie sono incluse nella query di inserimento.
  2. Se non funziona quindi creare un nuovo metodo per l'inserimento e seguire questo:

    OleDbConnection conn = new OleDbConnection (connectionString);

    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();
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top