2012-06-24 13 views

cevap

15

, bu iki yöntem kullanabilirsiniz Eğer ihtiyaçlarınıza bu uyarlayabilirsiniz tabii

public void RetrieveExcelFromDatabase(int ID, string excelFileName) 
{ 
    byte[] excelContents; 

    string selectStmt = "SELECT BinaryContent FROM dbo.YourTableHere WHERE ID = @ID"; 

    using (SqlConnection connection = new SqlConnection("your-connection-string-here")) 
    using (SqlCommand cmdSelect = new SqlCommand(selectStmt, connection)) 
    { 
     cmdSelect.Parameters.Add("@ID", SqlDbType.Int).Value = ID; 

     connection.Open(); 
     excelContents = (byte[])cmdSelect.ExecuteScalar(); 
     connection.Close(); 
    } 

    File.WriteAllBytes(excelFileName, excelContents); 
} 

- sen de diğer pek çok şey yapabileceğini - Eğer gerçekten istediğiniz şeye bağlı: Bu yöntemi kullanmak, geri Excel sayfası almak ve bir dosyada saklayın yapmak (sorunuzdan çok net değil).

+0

Dosyayı kaydetmeden önce sıkıştırmak faydalı olur mu? Eğer dosyalar büyükse ve/veya birçoğu varsa, bu uygunsa, avantajlı olabilir. –

+0

XLSX zaten sıkıştırılmış, –

0

Kullandığınız veri erişim teknolojisine göre değişir. Örneğin, Entity Framework'ü kullanırsanız, nesneleri kullanarak bir bayt dizisini veritabanına kaydedebilirsiniz.

// store Excel sheet (or any file for that matter) into a SQL Server table 
public void StoreExcelToDatabase(string excelFileName) 
{ 
    // if file doesn't exist --> terminate (you might want to show a message box or something) 
    if (!File.Exists(excelFileName)) 
    { 
     return; 
    } 

    // get all the bytes of the file into memory 
    byte[] excelContents = File.ReadAllBytes(excelFileName); 

    // define SQL statement to use 
    string insertStmt = "INSERT INTO dbo.YourTable(FileName, BinaryContent) VALUES(@FileName, @BinaryContent)"; 

    // set up connection and command to do INSERT 
    using (SqlConnection connection = new SqlConnection("your-connection-string-here")) 
    using (SqlCommand cmdInsert = new SqlCommand(insertStmt, connection)) 
    { 
     cmdInsert.Parameters.Add("@FileName", SqlDbType.VarChar, 500).Value = excelFileName; 
     cmdInsert.Parameters.Add("@BinaryContent", SqlDbType.VarBinary, int.MaxValue).Value = excelContents; 

     // open connection, execute SQL statement, close connection again 
     connection.Open(); 
     cmdInsert.ExecuteNonQuery(); 
     connection.Close(); 
    } 
} 

için: düz ADO.NET içinde bunu yapmak istiyorum ve onlar belleğe sığabilecek böylece Excel dosyaları tek seferde çok büyük değilse