2011-06-24 51 views

回答

2

的SQL部分:

-- 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 

C#的部分:寫文件

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

C#的部分:閱讀文件

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