2012-06-24 7 views

Antwort

15

Wenn Sie es in gerade ADO.NET tun wollen, und Ihre Excel-Dateien sind nicht zu groß, so dass sie sofort in den Speicher passen, können Sie diese beiden Methoden verwenden:

// 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(); 
    } 
} 

zu rufen Sie die Excel-Tabelle zurück und speichern sie in einer Datei, verwenden Sie diese Methode:

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); 
} 

natürlich können Sie diese an Ihre Bedürfnisse anpassen können - Sie viele andere Dinge tun könnten, auch - je nachdem, was Sie wirklich wollen zu tun (nicht sehr klar von Ihrer Frage).

+0

Wäre es sinnvoll sein, um die Datei zu komprimieren, bevor zu speichern? Wenn die Dateien groß sind und/oder viele von ihnen vorhanden sind, kann dies, wenn möglich, von Vorteil sein. –

+0

XLSX ist sowieso komprimiert, –

0

Es hängt von der Datenzugriffstechnologie Sie verwenden. Wenn Sie beispielsweise Entity Framework verwenden, können Sie ein Byte-Array einfach mithilfe von Objekten in der Datenbank speichern.