2016-06-02 8 views
0

그래,이 작업을 계속 해오 고 있으며 코드에 문제가 있는지 파악하는 데 어려움이 있습니다. 오류는 매우 모호합니다. { "INSERT INTO 문에 구문 오류가 있습니다."}. 아래는 내가 사용하고있는 코드입니다. 도움을 주셔서 미리 감사드립니다.데이터 집합에서 데이터베이스에 액세스하기 C#

INSERT INTO [Asset Inventory] (.... 

을하지만 그것을 AssetInventory 또는 Asset_Inventory 대신 이름을 더 나은 것 :

private void CreateSQL() 
    { 
     List<string> dataList = new List<string>(); 
     string delimiter = "|"; 
     string tableName = "MainAssets"; 
     string fileName = "RunningMaster.csv"; 

     DataSet data = new DataSet(); 
     StreamReader sr = new StreamReader(fileName); 
     data.Tables.Add(tableName); 
     data.Tables[tableName].Columns.Add("Plant"); 
     data.Tables[tableName].Columns.Add("Class"); 
     data.Tables[tableName].Columns.Add("Depr Account"); 
     data.Tables[tableName].Columns.Add("Inventory Number"); 
     data.Tables[tableName].Columns.Add("Dept"); 
     data.Tables[tableName].Columns.Add("Location"); 
     data.Tables[tableName].Columns.Add("Cap Date"); 
     data.Tables[tableName].Columns.Add("Last Inventoried"); 
     data.Tables[tableName].Columns.Add("Deactivation"); 
     data.Tables[tableName].Columns.Add("Asset Description"); 
     data.Tables[tableName].Columns.Add("Acquis Val"); 
     data.Tables[tableName].Columns.Add("Monthly Dep"); 
     data.Tables[tableName].Columns.Add("Ord dep post"); 
     data.Tables[tableName].Columns.Add("Accum Dep"); 
     data.Tables[tableName].Columns.Add("Book Val"); 
     data.Tables[tableName].Columns.Add("Serial"); 
     data.Tables[tableName].Columns.Add("Inventory Comments"); 
     data.Tables[tableName].Columns.Add("LFAC"); 
     data.Tables[tableName].Columns.Add("Room"); 
     data.Tables[tableName].Columns.Add("Pysical Location"); 
     data.Tables[tableName].Columns.Add("Manufacturer"); 
     data.Tables[tableName].Columns.Add("EFO"); 
     data.Tables[tableName].Columns.Add("Updated"); 
     data.Tables[tableName].Columns.Add("Status"); 
     data.Tables[tableName].Columns.Add("Inventory State"); 
     data.Tables[tableName].Columns.Add("Inventoried By"); 
     data.Tables[tableName].Columns.Add("Prior Room"); 
     string allData = sr.ReadToEnd(); 
     string[] rows = allData.Split("\r".ToCharArray()); 
     rows = rows.Skip(1).ToArray(); 

     foreach(string r in rows) 
     { 
      string[] items = r.Split(delimiter.ToCharArray()); 
      data.Tables[tableName].Rows.Add(items); 
     } 
     // this.dataGridView1.DataSource = data.Tables[0].DefaultView; 

     for (int i = 0; i <= data.Tables[tableName].Rows.Count - 1; i++) 
     { 
      MessageBox.Show(data.Tables[tableName].Rows[0][4].ToString()); 
       OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= hello.accdb"); 
       OleDbCommand cmd = new OleDbCommand(); 
       myConnection.Open(); 
       cmd.Connection = myConnection; 
      cmd.CommandText = "INSERT INTO Asset Inventory ([ID],[Plant],[Class],[Depr Account],[Inventory Number],[Dept],[Location],[Cap Date],[Last Inventoried],[Deactivation],[Asset Description],[Acquis Val],[Monthly Dep],[Ord dep posted],[Accum dep],[Book Val],[Serial],[Inventory Comment],[LFAC],[Room],[Pysical Location],[Manufacturer],[EFO],[Updated],[Status],[Inventory State],[Inventory By],[Prior Room])" + 
      "VALUES ('" + data.Tables[tableName].Rows[i][0].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][1].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][2].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][3].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][4].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][5].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][6].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][7].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][8].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][9].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][10].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][11].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][12].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][13].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][14].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][15].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][16].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][17].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][18].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][19].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][20].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][21].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][22].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][23].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][24].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][25].ToString() + "' , '" + 
          data.Tables[tableName].Rows[i][26].ToString() + "' , '" ; 


       cmd.ExecuteNonQuery(); 
       myConnection.Close(); 

답변

0

테이블의 이름은 그것의 이름에 공백을 갖고있는 것 같아요, 당신은 [] 그것을 둘러싸고 있습니다.

잘못된 디자인 결정 외에도 sql-parameters 대신 문자열 연결을 사용하도록 수정해야합니다. 현재 SQL injection에 취약 할 수 있습니다.

+0

고맙습니다. – DisarmedDevo

+0

@DisarmedDevo : 여러분을 환영합니다. 대답을 수락하는 것을 잊지 마십시오. –

관련 문제