2011-08-17 17 views
1

Excelシートからdatabase.iへのデータのインポートに取り組んでいます.Excelからdatabase.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するために、Excelシートからデータを挿入する私は、このコードの中に新しい行を挿入するためのコードを追加する必要がありますか私はする必要がありますか知りたいです別の場所に追加し、また私はそれについての疑いがあったとして私はコメントでマークした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を保持していて、その行を一意にするセルが2番目のセルだったとすると、このようなことを行います。 var uniqueKey =行[1]; <=は2番目の値を取得します。これが理にかなってほしい。 – Jethro

0

なぜあなたはデータテーブルをTempテーブルにアップロードしないのですか? delete文を実行して、すでにメインデータベーステーブルにある行を削除してください。残りの新しい行を挿入することができます。

1

使用しているデータベースを指定していないため、挿入中に重複レコードを無視することができます。テーブルには主キーが必要です。

oracle(11g)の場合は、insert文でignore_row_on_dupkey_indexヒントを使用できます。
SQL Serverの場合、インデックスを作成する必要がありますIGNORE_DUP_KEY
MySQLの場合は、IGNOREヒントをinsert文とともに使用できます。

毎回Excelシート全体を処理する必要がありますが、新しい行のみがテーブルに挿入されます。

関連する問題