Pregunta

Me gustaría insertar algunos datos en una base de datos.

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
Mensaje: Error de sintaxis en instrucción INSERT INTO
. Fuente:. Microsoft motor de base de datos Jet

Si cambio el comando de inserción:

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

y cambiar los datos de entrada que sólo tienen un valor de texto sola consigo:

No valor dado para uno o más exigidas parámetros.

Me estoy perdiendo algo?

¿Fue útil?

Solución

El problema estaba en los tipos de datos. El código en la pregunta funciona si los tipos de datos son compatibles.

Otros consejos

  1. Asegúrese de que todas las columnas necesarias se incluyen en la consulta de inserción.
  2. Si no funciona, entonces crear un nuevo método para insertar y siga esto:

    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();
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top