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