Debug "Syntax error in INSERT INTO statement" in C# when submitting data to Access Database using OleDbConnection

StackOverflow https://stackoverflow.com/questions/23410683

  •  13-07-2023
  •  | 
  •  

Question

I'm diving head first into both C# and Access databases. This is all brand new to me, so I have a small test database set up to work with a small template. I'm trying to figure out why I keep getting a syntax error that is triggered by the ExecuteNonQuery() method. Any help and insight would be appreciated.

Edit: SOLVED: This is the working code for this situation. All help was greatly appreciated!

    public void addToDb()
    {
        String first = "John";
        String last = "Doe";
        String testPath = GVar.TEST_FILEPATH + GVar.TEST_DATABASE;
        String strCommand = "INSERT INTO ID ([First], [Last]) Values(@First, @Last)";
        OleDbConnection dbTest = null;
        OleDbCommand cmd = null;

        try
        {
            dbTest = new OleDbConnection(GVar.OLE_DB_WRITE + testPath);
            dbTest.Open();

            cmd = new OleDbCommand(strCommand, dbTest);
            cmd.Parameters.AddWithValue("@First", first);
            cmd.Parameters.AddWithValue("@Last", last);
            cmd.ExecuteNonQuery();

            Console.WriteLine("Data Added");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Db Test: " + ex.Message);
        }
        dbTest.Close();
    }
Was it helpful?

Solution

From OleDbCommand.Parameters property

The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used. For example:

SELECT * FROM Customers WHERE CustomerID = ?

Therefore, the order in which OleDbParameter objects are added to the OleDbParameterCollection must directly correspond to the position of the question mark placeholder for the parameter in the command text.

I don't see anything wrong in your INSERT statement other than this.

cmd.CommandText = "INSERT INTO Identity ([First],[Last]) VALUES(?, ?)";
cmd.Parameters.AddWithValue("@First", first);
cmd.Parameters.AddWithValue("@Last", last);
cmd.ExecuteNonQuery();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top