2016-04-11 10 views
0

SSIS kod bileşen kullanılarak C# kodunu yürütmeden (Object hedefi, [] argümanlar, İmza sig, Boole yapıcı Nesne), bu hatayı alıyorum Burada, bir excel dosyası okuyorum ve dosya adı üzerinde dinamik olarak bir sql sunucu tablosu oluşturun ve verileri yükleyin. ("MyCommand.ExecuteNonQuery() deyimi yürütme özellikle iken;) ben Tablo oluşturma sırasında Bu hata karşılaşıldığındaExecuteNonQuery() System.RuntimeMethodHandle.InvokeMethod de

Kod bakınız: -

SqlConnection myADONETConnection = new SqlConnection(); 
myADONETConnection = (SqlConnection)(Dts.Connections["LANDConn"].AcquireConnection(Dts.Transaction) as SqlConnection); 
SqlCommand myCommand = new SqlCommand(tableDDL, myADONETConnection); 
myCommand.ExecuteNonQuery(); 

Ben

+1

hata ayıklama Lütfen ve hiçbir hata "hata yoktur bize gönderiyor SqlCommand .. – BugFinder

+0

göstermek mesaj". Size yardımcı olabilecek herkes için yeterince bilgi göndermediniz. –

cevap

0

kamu ne yapmalıyım? . Ana()

{ Yaylı KlasörYolu = Dts.Variables [ "Kullanıcı :: KlasörYolu"] Value.ToString (void);

var directory = new DirectoryInfo (FolderPath);

FileInfo [] dosya = directory.GetFiles();

dize fileFullPath = "";

foreach (dosyalarında FileInfo dosyası)

{

string filename = ""; 

fileFullPath = FolderPath+"\\"+file.Name;      

filename = file.Name.Replace(".xlsx","");      

string ConStr; 

string HDR; 

HDR="YES"; 

ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
      fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + 
      HDR + ";IMEX=1\""; 

OleDbConnection cnn = new OleDbConnection(ConStr); 

cnn.Open(); 

DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
        null); 

string sheetname; 

sheetname=""; 

foreach (DataRow drSheet in dtSheet.Rows) 

    { 
     if (drSheet["TABLE_NAME"].ToString().Contains("$")) 
     { 
      sheetname=drSheet["TABLE_NAME"].ToString(); 
      OleDbCommand oconn = new OleDbCommand("select * from [" + 
            sheetname + "]", cnn); 
      OleDbDataAdapter adp = new OleDbDataAdapter(oconn); 
      DataTable dt = new DataTable(); 
      adp.Fill(dt); 
      string tableDDL = ""; 
      tableDDL += "IF Not EXISTS (SELECT * FROM sys.objects WHERE 
          object_id = "; 
       tableDDL +="OBJECT_ID(N'[dbo].[" + filename +"]') AND 
          type in (N'U'))"; 
       tableDDL += "Create table [" + filename + "]"; 
       tableDDL += "("; 
       for (int i = 0; i < dt.Columns.Count; i++) 
       { 
        if (i != dt.Columns.Count - 1) 
        tableDDL += "[" + dt.Columns[i].ColumnName + "] " 
           + "NVarchar(max)" + ","; 
        else 
         tableDDL += "[" + dt.Columns[i].ColumnName + "] " 
             + "NVarchar(max)"; 
        } 
        tableDDL += ")"; 

       SqlConnection myADONETConnection = new SqlConnection(); 
       myADONETConnection = (SqlConnection) 
       (Dts.Connections["Connection 
        Manager"].AcquireConnection(Dts.Transaction) as 
          SqlConnection); 
       SqlCommand myCommand = new SqlCommand(tableDDL, 
        myADONETConnection); 
       myCommand.ExecuteNonQuery(); 

       //Load the data from DataTable to SQL Server Table. 
       SqlBulkCopy blk = new SqlBulkCopy(myADONETConnection); 
       blk.DestinationTableName = "[" + filename +"]"; 
       blk.WriteToServer(dt); 
      } 
     } 

}

+0

Merhaba, ben bir excel dosyasından veri okumak ve bu dosyaları excel dinamik tablolar oluşturmak için yukarıda belirtilen kodu kullandık. Ancak, özellikle de myCommand.ExecuteNonQuery() adresinde belirtilen hata iletisini alıyorum; hat. Lütfen beni düzeltmek için herhangi bir seçenek öneren var mı? – Deb