2011-06-27 23 views
1

VS2008でC#を使用してAccess 2007データベースの挿入文を作成するには、いくつかの助けが必要です。私が持っている現在のコードは私に "ERROR 42000:INSERT INTO文の構文エラー"を与えます。何が間違っているのか分かりません。私はこのコードを、今年初めにmsアクセス・テーブルに接続し、データベース情報をOracleデータベースに転送する作業コードに基づいて作成しました。C#VS2008 ODBCを使用してMS Access 2007に挿入する

現在のコード

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(); 
    } 
} 
} 

の作業コード

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(); 
       } 

    } 

} 

答えて

1

試してみてください。

cmdnon.CommandText = "INSERT INTO Commonstation... 

は、少なくとも、それはエラーがあなたを語っているものです。

+0

私はあなたが言っていることと何が違うのか、既にコードに何があるのか​​は分かりません。彼らはまったく同じように見えます。 –

+0

@ダンテ。あなたの現在のコードは 'INSERT COMMUNATION'を持っています。私は 'INSERT'の後に' INTO'を置くと言っています。 – AngryHacker

+0

さて、申し訳ありませんが、私はそれがそういう形で書かれていると思いました。問題が修正されました。ありがとうございます。私の次の問題は物事を少し難しくしています。 –

0
string MyAccessConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/mydata.accdb;Persist Security Info=False;"; 

private void button1_Click(object sender, EventArgs e) 
{ 
    OleDbConnection conn = new OleDbConnection(MyAccessConn); 
    OleDbCommand cmd; 
    conn.Open(); 
    try 
    { 
     cmd = conn.CreateCommand(); 

     cmd.CommandText = "INSERT INTO data([Name],[Surname],[Username],[Password]) VALUES(@Name,@Surname,@Username,@Password)"; 
     cmd.Parameters.AddWithValue("@Name", name_txt.Text); 
     cmd.Parameters.AddWithValue("@Surname", sur_txt.Text); 
     cmd.Parameters.AddWithValue("@Username", user_txt.Text); 
     cmd.Parameters.AddWithValue("@Password", pwd_txt.Text); 

     cmd.ExecuteNonQuery(); 
    } 
    catch (OleDbException ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
     if (conn.State == ConnectionState.Open) 
     { 
      conn.Close(); 
     } 
    } 
} 
関連する問題