2011-09-15 6 views
1

これはコーディングの正しい方法ですか?そのワーキング100% 罰金..しかし、それはどのように素敵に見えるように私はより多くのいくつかを短くしてください....C#データセットからテーブルに挿入

とどのように私は「REGIDはすでにテーブル内に 存在する場合.....という条件をご確認くださいそれは 列を更新する必要があり、その列....

if (DSDBMax.Tables[0].Rows.Count > 0) 
{ 


     for (int i = 0; i < DSDBMax.Tables[0].Rows.Count; i++) 
     { 
       DataAccess.Command cmdInsert = new Oca.DataAccess.Command(); 
       cmdInsert.CommandType = System.Data.CommandType.Text; 
       cmdInsert.CommandString = "INSERT INTO STATUS (RigID,RigName,GroundDistance,DrillingSupervisor,DrillingEngineer,GeoSteering,Directional,MudCompany,OHLogs,JobIDRec,County,Area,WellName,Slot_Conductor,SurfaceLegalLocation,LocationType,State_Province,SurfaceLocation_Slot,Field,ReserveCategory,JOA,Well_Type,Land_Expiration,WI,NRI,Drilling_Permit,Unit_AlternateApproval,AFE,c_CALLS,c_STKD,c_WL,c_PLAT,c_DP,c_GP,c_DRILLPROG,c_SIMOPS,c_LOC,c_PMT,c_UNITAPP,c_AFE,c_TITLE) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 
       //DataSet DsInsert = DataAccess.GetDataSet(dCorpID, cmdInsert); 
       // DataAccess.ExecuteNonQuery(dCorpID, cmdInsert); 
       cmdInsert.AddParameter("RigID",DSDBMax.Tables[0].Rows[i][0].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("RigName",DSDBMax.Tables[0].Rows[i][1].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("GroundDistance",DSDBMax.Tables[0].Rows[i][2].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("DrillingSupervisor",DSDBMax.Tables[0].Rows[i][3].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("DrillingEngineer", DSDBMax.Tables[0].Rows[i][4].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("GeoSteering", DSDBMax.Tables[0].Rows[i][5].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("Directional", DSDBMax.Tables[0].Rows[i][6].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("MudCompany", DSDBMax.Tables[0].Rows[i][7].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("OHLogs", DSDBMax.Tables[0].Rows[i][8].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("JobIDRec", DSDBMax.Tables[0].Rows[i][9].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("County", DSDBMax.Tables[0].Rows[i][10].ToString(), ParameterDirection.Input); 
       cmdInsert.AddParameter("Area", DSDBMax.Tables[0].Rows[i][11].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("WellName", DSDBMax.Tables[0].Rows[i][12].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("Slot_Conductor", DSDBMax.Tables[0].Rows[i][13].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("SurfaceLegalLocation", DSDBMax.Tables[0].Rows[i][14].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("LocationType", DSDBMax.Tables[0].Rows[i][15].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("State_Province", DSDBMax.Tables[0].Rows[i][16].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("SurfaceLocation_Slot", DSDBMax.Tables[0].Rows[i][17].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("Field", DSDBMax.Tables[0].Rows[i][18].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("ReserveCategory", DSDBMax.Tables[0].Rows[i][19].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("JOA", DSDBMax.Tables[0].Rows[i][20].ToString(), ParameterDirection.Input);         
        cmdInsert.AddParameter("Well_Type", DSDBMax.Tables[0].Rows[i][21].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("Land_Expiration", DSDBMax.Tables[0].Rows[i][22].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("WI", DSDBMax.Tables[0].Rows[i][23].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("NRI", DSDBMax.Tables[0].Rows[i][24].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("Drilling_Permit", DSDBMax.Tables[0].Rows[i][25].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("Unit_AlternateApproval", DSDBMax.Tables[0].Rows[i][26].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("AFE", DSDBMax.Tables[0].Rows[i][27].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_CALLS", DSDBMax.Tables[0].Rows[i][28].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_STKD", DSDBMax.Tables[0].Rows[i][29].ToString(), ParameterDirection.Input); 
         cmdInsert.AddParameter("c_WL", DSDBMax.Tables[0].Rows[i][30].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_PLAT", DSDBMax.Tables[0].Rows[i][31].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_DP", DSDBMax.Tables[0].Rows[i][32].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_GP", DSDBMax.Tables[0].Rows[i][33].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_DRILLPROG", DSDBMax.Tables[0].Rows[i][34].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_SIMOPS", DSDBMax.Tables[0].Rows[i][35].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_LOC", DSDBMax.Tables[0].Rows[i][36].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_PMT", DSDBMax.Tables[0].Rows[i][37].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_UNITAPP", DSDBMax.Tables[0].Rows[i][38].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_AFE", DSDBMax.Tables[0].Rows[i][39].ToString(), ParameterDirection.Input); 
        cmdInsert.AddParameter("c_TITLE", DSDBMax.Tables[0].Rows[i][40].ToString(), ParameterDirection.Input); 

        DataAccess.ExecuteNonQuery(dCorpID, cmdInsert); 




        } 
+0

はあなたの問題は解決されていますか? – SeanVDH

答えて

3

私があなたの場合は、SqlBulkCopy()と列マッピングを使用します。以下のような

何か:

using (SqlBulkCopy copy = new SqlBulkCopy(
    { 
       copy.ColumnMappings.Add("dtcolumnname", "sqlcolumnname"); 


     copy.DestinationTableName = "TABLE"; 
     copy.WriteToServer(table); 
    } 
+0

という簡単な方法を求めています。copy.ColumnMappings.Add( "dtcolumnname"、 "sqlcolumnname"); 41回(私のプログラムのために)右に来るでしょう..? – Rocky111

+0

それは異なります。 SQLテーブルにあるデータテーブルに同じレイアウトがある場合は、列マッピングをまったく行う必要はありません。それ以外の場合は、指定する必要があります。 – SeanVDH

+0

私のソーステーブルとデスティネーションテーブルはまったく同じです..どうすればいいですか? – Rocky111

0

変更へのコードの最後の行を追加しないでください。これはトリックを行う必要があります

cmdInsert.ExecuteNonQuery(); 

+1

彼のコードは既に動作しています。彼はこの場合、 – SeanVDH

関連する問題