2013-01-07 2 views
2

하나의 탭에서 행을 가져 와서 다른 행에 삽입하려면 Excel 2007에서 sqlserver 또는 mysql과 같을 것이라고 생각합니다. 그냥 선택하고 삽입하십시오.선택 및 삽입 명령 OLEDB 명령 C#

이 쿼리를 사용하고 있지만 구문 오류로 잘못된 것이 확실하지 않습니다.

testCommand.CommandText = "Insert into [ActiveLicenses$](Select * from [companies$] 
          where [License Number] = '" + lnumber + "')"; 

    testCommand.ExecuteNonQuery(); 

UPDATE

은 엑셀 시트에서 직접 행을 삭제하는 방법은 없나요?

답변

0

빠른 방법입니다.

나는 모든 라이센스를 DataTable로 가져와 필요하지 않은 라이센스를 제거하는 데 1 분 미만이 걸립니다. 그리고 나서 DataTable을 CSV로 내 보내서 1 분 안에 파일을 준비하십시오. 아래

샘플 :

static List<string> licensecAll = new List<string>(); 
DataTable dt = new DataTable(); 
      OleDbDataAdapter dp = new OleDbDataAdapter("select * from [companies$]", testCnn); 
      dp.Fill(dt); 
      if (dt.Rows.Count > 0) 
      { 
       for (int i = dt.Rows.Count-1; i >= 0; i--) 
       { 
        string lnum = dt.Rows[i][0].ToString(); 
        Console.WriteLine("LICENSE NUMBER" + lnum); 
        if (!licensecAll.Contains(lnum)) 
        { 
         Console.WriteLine("ROW REMOVED"); 
         dt.Rows.RemoveAt(i); 
        } 
       } 

      } 

그런 다음 단순히 CSV로 DataTable을 실행 ....

public static void DataTable2CSV(DataTable table, string filename, string seperateChar) 
    { 

     StreamWriter sr = null; 

     try 
     { 

      sr = new StreamWriter(filename); 
      string seperator = ""; 
      StringBuilder builder = new StringBuilder(); 
      foreach (DataColumn col in table.Columns) 
      { 

       builder.Append(seperator).Append(col.ColumnName); 

       seperator = seperateChar; 
      } 

      sr.WriteLine(builder.ToString()); 

      foreach (DataRow row in table.Rows) 
      { 

       seperator = ""; 
       builder = new StringBuilder(); 
       foreach (DataColumn col in table.Columns) 
       { 

        builder.Append(seperator).Append(row[col.ColumnName]); 
        seperator = seperateChar; 

       } 

       sr.WriteLine(builder.ToString()); 

      } 

     } 

     finally 
     { 

      if (sr != null) 
      { 

       sr.Close(); 

      } 

     } 

    } 
0

당신은 엑셀에서 데이터를 추출하는 SQL을 사용할 수 있습니다

 using (OleDbDataAdapter da = new OleDbDataAdapter(
    "SELECT " + columns + " FROM [" + worksheetName + "$]", conn)) 
    { 
     DataTable dt = new DataTable(tableName); 
     da.Fill(dt); 
     ds.Tables.Add(dt); 
    } 

불행하게도 엑셀에 삽입하면이 방법을 작동하지 않습니다. OleDb 삽입 명령을 사용하여 쓸 셀을 지정할 수 없다고 확신하면 지정된 열의 다음 열까지 자동으로 이동합니다. 업데이트 진술로 해결할 수 있습니다 :

sql = "Update [Sheet1$A1:A10] SET A10 = 'YourValue'"; 
myCommand.CommandText = sql; 
myCommand.ExecuteNonQuery(); 

개인적으로 oleDB 대신 VSTO를 사용합니다. 셀을 추출한 후 코드가있는 스프레드 시트를 열고 데이터를 삽입하십시오.

Excel.Workbook wb = xlApp.Workbooks.Open(filePath); 
rng = wb.Range["A1"]; 
rng.Value2 = "data"; 
+0

는 거의 50 만 행이 하나씩 그래서 이것은 진짜 느리게 만들 수도 얻을 필요가 ,,, , – confusedMind

+0

OleDB를 사용하여 행을 개별적으로 삽입하면 속도가 느려지므로 VSTO를 사용하면 성능이 향상됩니다 (특히이 기술을 사용하는 경우) : http://stackoverflow.com/a/2294087/495455 –

+0

내 대답을 확인하십시오. 올바른 견해와 RITE 접근법 – confusedMind