开发者

storing files in sql server 2008 using the filestream option

开发者 https://www.devze.com 2023-03-15 06:24 出处:网络
i am using an asp.net mvc 2 application to upload files and store 开发者_如何学编程them in a sql server 2008 db. I would like to use the filestream option. Does anyone has any code samples for this?Th

i am using an asp.net mvc 2 application to upload files and store 开发者_如何学编程them in a sql server 2008 db. I would like to use the filestream option. Does anyone has any code samples for this?


The SQL part:

-- Enable the FileStream Feature
EXEC sp_configure filestream_access_level, 2
GO
RECONFIGURE
GO


--Create a special file group and mark it as a stream
CREATE DATABASE FileStreamExample
ON
PRIMARY ( 
    NAME = FileStreamExample_Primary,
    FILENAME = 'c:\Data\FileStreamExample.mdf'),
FILEGROUP FileStreamGroup CONTAINS  FILESTREAM ( 
    NAME = FileStreamExample_FileGroup,
    FILENAME = 'c:\Data\FileStreamExample')
LOG ON ( NAME = FileStreamExample_Log,
    FILENAME = 'c:\Data\FileStreamExample.ldf')
GO

USE FileStreamExample
GO

CREATE TABLE Product
(
  ProductID INT  NOT NULL  PRIMARY KEY,
  Name VARCHAR(50) NOT NULL,
  Picture VARBINARY(MAX) FILESTREAM  NULL,
  RowGuid UNIQUEIDENTIFIER  NOT NULL  ROWGUIDCOL
  UNIQUE DEFAULT NEWID()
)
GO

Insert into Product
Values(1, 'Bicycle', 0x00, default)
GO

Select * From Product

The C# part: Write the file

   string connectionString = ConfigurationManager.ConnectionStrings["fileStreamDB"].ConnectionString;
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        //Get the PathName of the File from the database
        command.CommandText = "SELECT Picture.PathName(), "
        + "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product WHERE ProductID = 1";
        SqlTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
        command.Transaction = transaction;
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                string path = reader.GetString(0);
                SqlFileStream stream = new SqlFileStream(path,
                    (byte[])reader.GetValue(1), FileAccess.Write,
                    FileOptions.SequentialScan, 0);                        
                string contents = txtInput.Text;                        
                stream.Write((System.Text.Encoding.ASCII.GetBytes(contents)), 0, contents.Length);
                stream.Close();
            }
        }
        transaction.Commit();
    }

The C# part: Read the file

      string connectionString = ConfigurationManager.ConnectionStrings["fileStreamDB"].ConnectionString;                
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            SqlCommand command = new SqlCommand();
            command.Connection = connection;
            //Get the PathName of the File from the database
            command.CommandText = "SELECT Picture.PathName(), "
            + "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product WHERE ProductID = 1";
            SqlTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
            command.Transaction = transaction;
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {                        
                    string path = reader.GetString(0);                        
                    SqlFileStream stream = new SqlFileStream(path,
                        (byte[])reader.GetValue(1),FileAccess.Read,FileOptions.SequentialScan, 0);                        
                    lstResults.Items.Clear();
                    int length = (int) stream.Length;
                    byte[] contents = new byte[length];
                    stream.Read(contents,0,length);                     
                    string results = System.Text.Encoding.ASCII.GetString(contents);
                    lstResults.Items.Add(results);
                    stream.Close();
                }
            }
            transaction.Commit();
        }
0

精彩评论

暂无评论...
验证码 换一张
取 消