使用SQL Server 2008的FILESTREAM特性管理文件
2009-02-26 10:21:54 来源:WEB开发网所有存储在Picture列中的二进制数据都不能通过文件系统访问,访问这个二进制数据的唯一方法是通过标准的CRUD (INSERT,UPDATE和 DELETE)SQL语句,下面的例子是向Product表中插入一行数据:
INSERT INTO Product VALUES(1, 'Bicycle', 0x00, default)
GO
插入的新行ProductID等于1,Name包括Bicycle,Picture列为NULL,RowGuid列包括一些默认的GUID值,现在你可以在.NET程序中检索这一行,当然也可以覆盖和扩展它的内容。
使用FILESTREAM(文件流)写入数据
在这个例子中,假设用户产生了一些输入,要将这些输入内容转换成字节数组,并将其存储在Product表的Picture列中,接下来创建一个Visual C#视窗应用程序,命名为FileStreamExample,在新项目的默认表单上,添加一个按钮,命名为btnWriteFile,一个名叫txtInput的文本输入框(TextBox),一个命名为lstResults的列表框(ListBox),然后,在按钮上双击创建一个click事件处理器,包括清单1中的代码。
清单1 使用FILESTREAM存储数据
private void btnWriteFile_Click(object sender, EventArgs e)
{
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();
}
MessageBox.Show("File contents successfully written");
}
- ››sql server自动生成批量执行SQL脚本的批处理
- ››使用linux中的quota教程
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››使用jxl生成带动态折线图的excel
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
更多精彩
赞助商链接