2011-08-17 4 views
1

excel 시트에서 database.i로 데이터를 가져 오는데 성공했습니다. Excel에서 데이터를 성공적으로 가져올 수 있습니다 .i 어떻게 새 행만 추가 할 수 있는지 알고 싶습니다. 이전 데이터를 추가하지 않고도 Excel 시트에서 데이터베이스로. excel 시트에서 데이터베이스로 새 행만 삽입하는 방법

  for (int i = 0; i < exceltable.Rows.Count; i++) 
      { 
       if (i > 1) 
       { 
        DataRow row = exceltable.Rows[i]; 
        object ID = row[0].ToString(); 


        if (ID != null && !String.IsNullOrEmpty(ID.ToString().Trim())) 
        { 
         Int16 CustID = Convert.ToInt16(ID); 
         string CustName = row[1].ToString(); 
         string CardScheme = row[2].ToString(); 
         string Outlet = row[3].ToString(); 
         string TerminalNum = row[4].ToString(); 
         Int32 Terminal = Convert.ToInt32(TerminalNum); 

         string Date1 = row[5].ToString(); 
         DateTime Date = Convert.ToDateTime(Date1); 

         string Time = row[6].ToString(); 
         DateTime DateTime = Convert.ToDateTime(Time); 

         string Amount1 = row[7].ToString(); 
         double Amount = Convert.ToDouble(Amount1); 

         string columnNames = "CustID,CustName,CardScheme,Outlet,TerminalNum,TranDate,TranDateTime,Amount"; 
         string query1 = String.Format("insert into customer({0})values ('{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')", columnNames, CustID, CustName, CardScheme, Outlet, Terminal, Date, DateTime, Amount); 
         SqlCommand com = new SqlCommand(query1, connection); 
         com.ExecuteNonQuery(); 

        } 
        **// else if (i==exceltable.Rows[exceltable.Rows.Count-1]-1) 
        //{ 
        // DataRow Newrow = exceltable.NewRow(); 
        // Newrow["CustID"] = row[0].ToString(); 
        // Newrow["CustName"] = row[1].ToString(); 
        // Newrow["CardScheme"] = row[2].ToString(); 
        // Newrow["Outlet"] = row[3].ToString(); 
        // Newrow["TerminalNum"] = row[4].ToString(); 
        // Newrow["TranDate"] = row[5].ToString(); 
        // Newrow["TranDateTime"] = row[6].ToString(); 
        // Newrow["Amount"] = row[7].ToString(); 
        // exceltable.Rows.Add(Newrow); 
        // exceltable.AcceptChanges(); 

        //}** 

       } 

      } 


       DataRow lastrow=exceltable.Rows[exceltable.Rows.Count-1]; 
       if(!String.IsNullOrEmpty(lastrow.ToString().Trim())) 
       { 
        string Count = lastrow[4].ToString(); 
        Int16 TotalRows = Convert.ToInt16(Count); 
        string Sum = lastrow[7].ToString(); 
        double TotalAmount = Convert.ToDouble(Sum); 

        SqlCommand cmd = new SqlCommand("insert into tblExcel(TotalRows,TotalAmount) values('"+TotalRows+"','"+TotalAmount+"')",connection); 
        cmd.ExecuteNonQuery(); 
       }     

       return true; 
     } 

지금 내가 어떤 guidance..above 코드가 내가 알고 싶은 database..now하는 엑셀 시트에서 데이터를 삽입하려면이 코드 내에서 새 행을 삽입하는 코드를 추가 할 필요가 또는 내가 필요합니까 다른 어딘가에 추가하고 또한 내가 그것에 대해 의심했다 .. 내가 올바른 방향으로가는 .. 내가 가이드 날 날 코멘트로 표시된 datatable의 NewRow() 메서드를 사용하여 시도했다.

답변

0

AFAIK 직접 해결책이 없습니다. 당신은 이것에 대한 몇 가지 트릭을 생각해 내야합니다. 내가 할 수있는 일은, 지금까지 DB에 삽입 한 레코드 수 (새 레코드가 끝에 삽입되었다고 가정)를 확인한 다음 해당 번호의 레코드가 DB에 추가됩니다.

2

데이터베이스에있는 데이터와 대조하여 데이터를 확인해야합니다. 해당 행을 고유하게 만드는 Key가 있어야합니다.

var row = RowFromExcel(); //Row from Excel 
var uniqueKey = row.Key; 

if (!FindRowInDbWithKeyExists(uniqueKey)) 
{ 
    //If not found in Db then insert new row. 
} 
+0

RowFromExcel() 및 row.Key ..의 의미를 설명 할 수 있습니까? – Nazima

+0

@ Nazima, RowFromExcel()은 클래스 또는 값 목록 만 반환하는 메서드입니다. 기본적으로 Excel은 Excel에서 각 셀을 능가합니다. row.Key는 셀이 그 행을 유일하게 만드는 곳입니다. 그래서 List String을 returing하고 그 행을 고유하게 만든 셀이 두 번째 셀이라고 가정 해 봅시다. 이렇게하면됩니다. var uniqueKey = rows [1]; <= 두 번째 값을 가져옵니다. 희망이 의미가 있습니다. – Jethro

0

왜 임시 테이블에 데이터 테이블을 업로드하지 않습니까? 이미 주 데이터베이스 테이블에있는 행을 제거하려면 delete 문을 실행하십시오. 그런 다음 나머지 새로운 행을 삽입 할 수 있습니다.

1

사용중인 데이터베이스를 지정하지 않았 으면 삽입하는 동안 중복 레코드를 무시하도록 선택할 수 있습니다. 테이블에 기본 키가 있어야합니다.

오라클 (11g)의 경우 insert 문과 함께 ignore_row_on_dupkey_index 힌트를 사용할 수 있습니다.
SQL 서버의 경우 IGNORE_DUP_KEY
으로 색인을 생성해야합니다. MySQL의 경우 삽입 문과 함께 IGNORE 힌트를 사용할 수 있습니다.

매번 전체 Excel 시트를 처리해야하지만 새 행만 테이블에 삽입됩니다.

관련 문제