Search code examples
c#visual-studio-2008odbcms-access-2007insert-into

Insert into MS Access 2007 using C# VS2008 ODBC


I need some help with creating an insert statement for an Access 2007 database using C# in VS2008. The current code that I have gives me "ERROR 42000: Syntax error in INSERT INTO statement." I am not sure what is wrong. I wrote this code based on a working code that I used earlier this year that connected to an ms access table and transfer the database info into an oracle database.

Current code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Data.OracleClient;
using System.Data.SqlClient;
using System.IO;
using System.Data.Odbc;
class MainClass
{
static void Main(string[] args)
{
    string connectionString = "Dsn=Northwind 2007";
    string SQL = "SELECT * FROM Orders";
    string sqlins = "";
    OdbcConnection conn = new OdbcConnection(connectionString);

    OdbcCommand cmd = new OdbcCommand(SQL);
    cmd.Connection = conn;
    OdbcCommand cmdnon=new OdbcCommand(sqlins,conn);
    try
        {

        conn.Open();

        OdbcDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            Console.Write("OrderID:" + reader.GetInt32(0).ToString());
            Console.Write(" ,");
            Console.WriteLine("Customer:" + reader.GetString(1).ToString());
            cmdnon.CommandText = "INSERT Commonstation ( S1Flow,S2Flow,S3Flow,S4Flow) VALUES (9999,999,999,999)";
            int rowsAffected = cmdnon.ExecuteNonQuery();
            Console.WriteLine(rowsAffected);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.InnerException.ToString());
    }
    finally
    {
        reader.Close();
        conn.Close();
    }
}
}

Working code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Data.OracleClient;
using System.Data.SqlClient;
using System.IO;
using System.Data.Odbc;


class GasReporter
{
    static void Primary( string[] args)
    {  
 string connectionString = "Dsn=Gas_meter";
        string col0 = "";
        string col1 = "";
        string col2 = "";
        string col3 = "";
        string col4 = "";
        string col5 = "";
        string col6 = "";
        string col7 = "";
        string col8 = "";
        string sqlins = "";
        string connString = "DSN=Gas_meter_proj;Uid=cm;Pwd=cmdev123";
        OdbcConnection conn = new OdbcConnection(connString);       
 try
{
        OdbcCommand cmdnon = new OdbcCommand(sqlins, conn);                            
        conn.Open();
        cmdnon.Parameters.Add(col0, OdbcType.DateTime);
        cmdnon.Parameters.Add(col1, OdbcType.Numeric);
        cmdnon.Parameters.Add(col2, OdbcType.Numeric);
        cmdnon.Parameters.Add(col3, OdbcType.Numeric);
        cmdnon.Parameters.Add(col4, OdbcType.Numeric);
        cmdnon.Parameters.Add(col5, OdbcType.Numeric);
        cmdnon.Parameters.Add(col6, OdbcType.Numeric);
        cmdnon.Parameters.Add(col7, OdbcType.Numeric);
        cmdnon.Parameters.Add(col8, OdbcType.Numeric);

                    OdbcConnection DbConnection = new OdbcConnection(connectionString);
                    OdbcCommand DbCommand = DbConnection.CreateCommand();
                    DbConnection.Open();
                    DbCommand.CommandText = "SELECT DateTime, S1Flow, S2Flow, S3Flow, S4Flow, S1FlowTotal, S2FlowTotal, S3FlowTotal, S4FlowTotal FROM CommonStation WHERE Format(DateTime, 'mm/dd/yyyy') >=(select Format(max(DateTime),'mm/dd/yyyy') from CommonStation)";
                    OdbcDataReader DbReader = DbCommand.ExecuteReader();
                    int fCount = DbReader.FieldCount;

                   while (DbReader.Read())
                    {
                        col0 = DbReader["DateTime"].ToString();
                        col1 = DbReader["S1Flow"].ToString();
                        col2 = DbReader["S2Flow"].ToString();
                        col3 = DbReader["S3Flow"].ToString();
                        col4 = DbReader["S4Flow"].ToString();
                        col5 = DbReader["S1FlowTotal"].ToString();
                        col6 = DbReader["S2FlowTotal"].ToString();
                        col7 = DbReader["S3FlowTotal"].ToString();
                        col8 = DbReader["S4FlowTotal"].ToString();
                        cmdnon.CommandText="insert into Commonstation(CommStatDate_Time, S1_Flow, S2_Flow, S3_Flow, S4_Flow, S1_Flow_Total, S2_Flow_Total, S3_Flow_Total, S4_Flow_Total ) values (to_date('" + col0 + "', 'MM/DD/YYYY HH:MI:SS AM' ),to_number('" + col1 + "'), to_number('" + col2 + "'), to_number('" + col3 + "'), to_number('" + col4 + "'),to_number('" + col5 + "'),to_number('" + col6 + "'),to_number('" + col7 + "'),to_number('" + col8 + "'))";
                        int rowsAffected = cmdnon.ExecuteNonQuery(); 
                        Console.WriteLine(rowsAffected);
                    }
                }
                catch (Exception ex)
                {
                     ex.InnerException.ToString()+")");                                              
 }
    finally
                {
                    conn.Close();
                    DbReader.Close();
                    DbCommand.Dispose();
                    DbConnection.Close();
                }

    }

}

Solution

  • Try:

    cmdnon.CommandText = "INSERT INTO Commonstation...
    

    At least, that's what the error is telling you.