How do I insert/retrieve Excel files to varbinary(max) column in SQL Server 2008?

后端 未结 2 817
鱼传尺愫
鱼传尺愫 2020-12-31 15:25

I\'m trying to save Excel files into the database, I do not want to use filestream as it is required to have a server for that.

So how do I insert/update/select into

相关标签:
2条回答
  • 2020-12-31 16:16

    It depends on the data access technology you are using. For example, if you use Entity Framework, you can just save a byte array into the database using objects.

    0 讨论(0)
  • 2020-12-31 16:21

    If you want to do it in straight ADO.NET, and your Excel files aren't too big so that they can fit into memory at once, you could use these two methods:

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

    To retrieve the Excel sheet back and store it in a file, use this method:

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

    Of course, you can adapt this to your needs - you could do lots of other things, too - depending on what you really want to do (not very clear from your question).

    0 讨论(0)
提交回复
热议问题