SQL 部分:
-- FileStream 機能を有効にしますEXEC sp_configure filestream_access_level, 2GORECONFIGUREGO--特別なファイル グループを作成し、それをストリームとしてマークしますCREATE DATABASE FileStreamExampleONPRIMARY ( 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')GOUSE FileStreamExampleGOCREATE 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())GOInsert into ProductValues(1, 'Bicycle', 0x00, default)GOSelect * From Product
プレ>C# 部分:ファイルの書き込み
string connectionString =ConfigurationManager.ConnectionStrings["fileStreamDB"].ConnectionString; using (SqlConnection 接続 =新しい SqlConnection(connectionString)) { connection.Open(); SqlCommand コマンド =新しい SqlCommand(); command.Connection =接続; //データベースからファイルのパス名を取得する command.CommandText ="SELECT Picture.PathName(), " + "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product WHERE ProductID =1"; SqlTransaction トランザクション =connection.BeginTransaction(IsolationLevel.ReadCommitted); command.Transaction =トランザクション; using (SqlDataReader reader =command.ExecuteReader()) { while (reader.Read()) { string path =reader.GetString(0); SqlFileStream ストリーム =new SqlFileStream(path, (byte[])reader.GetValue(1), FileAccess.Write, FileOptions.SequentialScan, 0);文字列の内容 =txtInput.Text; stream.Write((System.Text.Encoding.ASCII.GetBytes(内容)), 0, 内容.長さ); stream.Close(); } } transaction.Commit(); }コード> プレ>
C# 部分:ファイルの読み取り
string connectionString =ConfigurationManager.ConnectionStrings["fileStreamDB"].ConnectionString; using (SqlConnection 接続 =新しい SqlConnection(connectionString)) { connection.Open(); SqlCommand コマンド =新しい SqlCommand(); command.Connection =接続; //データベースからファイルのパス名を取得する command.CommandText ="SELECT Picture.PathName(), " + "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product WHERE ProductID =1"; SqlTransaction トランザクション =connection.BeginTransaction(IsolationLevel.ReadCommitted); command.Transaction =トランザクション; using (SqlDataReader reader =command.ExecuteReader()) { while (reader.Read()) { string path =reader.GetString(0); SqlFileStream ストリーム =新しい SqlFileStream(パス, (byte[])reader.GetValue(1),FileAccess.Read,FileOptions.SequentialScan, 0); lstResults.Items.Clear(); int 長さ =(int) stream.Length;バイト[] 内容 =新しいバイト[長さ]; stream.Read(内容、0、長さ);文字列の結果 =System.Text.Encoding.ASCII.GetString(内容); lstResults.Items.Add(結果); stream.Close(); } } transaction.Commit(); }コード> プレ>