sql >> データベース >  >> RDS >> Sqlserver

filestreamオプションを使用してSQL Server 2008にファイルを保存する

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


    1. 非常に小さい/空のテーブルに参加するときに、LIMITを使用しているのにMySQLがフルスキャンを行うのはなぜですか?

    2. Flot、html、PHP、およびMySqlクエリを使用して複数のグラフを描画します

    3. mysqlでデータベースを復元する方法は?

    4. 2つの日付範囲の間の等しい日数SQL