Search code examples
c#ms-accessoledboledbexception

OleDb Exception


For 5 hour searching i can't find my mistake. I get this exception. What is wrong?

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in MyDictionary.exe

Additional information: Syntax error in INSERT INTO statement.

My code:

public void Insert(Word word)
{
    string language=FindLanguage();
    try
    {
        command.CommandText ="INSERT INTO "+language+" ( Native , Foreign , Definition , AddingDate)  values ( '" + word.Native + "' , '" + word.Foreign + "' , '" + word.Definition + "' ,'" + word.AddingDate + "')";
            command.CommandType = System.Data.CommandType.Text;
            connection.Open();

            command.ExecuteNonQuery();
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        if (connection != null)
        {
            connection.Close();
        }
    }
}

Solution

  • You should use parameters in your insert statement.Also looks like you are missing command.Connection = connection;. Note that your SQL is prone for SQL Injection

    command.CommandText ="INSERT INTO "+language+"([Native],[Foreign],[Definition],[AddingDate]) VALUES (@Native,@Foreign,@Definition,@AddingDate)";
    
    command.Parameters.AddWithValue("@Native", word.Native);
    command.Parameters.AddWithValue("@Foreign",word.Foreign);
    command.Parameters.AddWithValue("@Definition",word.Definition);
    command.Parameters.AddWithValue("@AddingDate",word.AddingDate);
    
    command.CommandType = System.Data.CommandType.Text;
    command.Connection = connection;
    connection.Open();
    
    command.ExecuteNonQuery();