進行状況とともに SQL Server FileStream にアクセスする方法
FILESTREAM ストレージを設計および実装するための SQL Server FileStream 関数の詳細なリファレンス オンライン ヘルプ
ここでは、Win32 を使用して FILESTREAM データを管理し、高度なアクセスを実現するコードを調整しています。これは、より大きなファイルにアクセスする場合により意味があります
FileStream を使用するには、まず SQL Server 構成マネージャーで FileStream オプションをオンにします。 SQL Server 構成マネージャー – SQL Server サービス – SQL Server サービスの検索 – プロパティ – FILESTREAM – 右側のサービス リストで、必要に応じてリモート クライアントが FILESTREAM データにアクセスできるようにします。他の推奨事項を両方とも選択して選択します。構成が完了したら、設定を有効にするために SQL Server サービスを再起動する必要があります。
次に、次のスクリプトを使用してテスト データベースとテスト テーブルを作成します
-- =========================================================-- 启用 filestream_access_level-- =========================================================EXEC sp_configure 'filestream_access_level', 2; -- 0=禁用 1=针对 T-SQL 访问启用 FILESTREAM 2=针对 T-SQL 和 WIN32 流访问启用 FILESTREAMRECONFIGURE; GO-- =========================================================-- 创建测试数据库-- =========================================================EXEC master..xp_create_subdir 'f:\temp\db\_test';CREATE DATABASE _testON PRIMARY( NAME = _test, FILENAME = 'f:\temp\db\_test\_test.mdf'), FILEGROUP FG_stream CONTAINS FILESTREAM( NAME = _test_file_stream, FILENAME = 'f:\temp\db\_test\stream') LOG ON( NAME = _test_log, FILENAME = 'f:\temp\db\_test\_test.ldf') ;GO-- =========================================================-- FileStream-- =========================================================-- =================================================-- 创建 包含 FileStream 数据的表-- -------------------------------------------------CREATE TABLE _test.dbo.tb_fs( id uniqueidentifier ROWGUIDCOL -- 必需 DEFAULT NEWSEQUENTIALID ( ) PRIMARY KEY, name nvarchar(260), content varbinary(max) FILESTREAM );GO
下面的 VB 脚本实现带进度显示的文件存(Write方法)取(Read方法)
Imports System.IO Imports System Imports System.Collections.Generic Imports System.Text Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlTypes Module Module1 Public Sub Main(ByVal args As String()) Dim sqlConnection As New SqlConnection("Integrated Security=true;server=localhost") Try sqlConnection.Open() Console.WriteLine("将文件保存到 FileStream") Write(sqlConnection, "test", "f:\temp\re.csv") Console.WriteLine("从 FileStream 读取数据保存到文件") Read(sqlConnection, "test", "f:\temp\re_1.csv") Catch ex As System.Exception Console.WriteLine(ex.ToString()) Finally sqlConnection.Close() End Try Console.WriteLine("处理结束,按 Enter 退出") Console.ReadLine() End Sub ''' <summary> ''' 将文件保存到数据库 ''' </summary> ''' <param name="conn">数据库连接</param> ''' <param name="name">名称</param> ''' <param name="file">文件名</param> Sub Write(ByVal conn As SqlConnection, ByVal name As String, ByVal file As String) Dim bufferSize As Int32 = 1024 Using sqlCmd As New SqlCommand sqlCmd.Connection = conn '事务 Dim transaction As SqlTransaction = conn.BeginTransaction("mainTranaction") sqlCmd.Transaction = transaction '1. 读取 FILESTREAM 文件路径 ( 注意函数大小写 ) sqlCmd.CommandText = " UPDATE _test.dbo.tb_fs SET content = 0x WHERE name = @name; IF @@ROWCOUNT = 0 INSERT _test.dbo.tb_fs(name, content) VALUES( @name, 0x ); SELECT content.PathName() FROM _test.dbo.tb_fs WHERE name = @name;" sqlCmd.Parameters.Add(New SqlParameter("name", name)) Dim filePath As String = Nothing Dim pathObj As Object = sqlCmd.ExecuteScalar() If Not pathObj.Equals(DBNull.Value) Then filePath = DirectCast(pathObj, String) Else Throw New System.Exception("content.PathName() failed to read the path name for the content column.") End If '2. 读取当前事务上下文 sqlCmd.CommandText = "SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()" Dim obj As Object = sqlCmd.ExecuteScalar() Dim txContext As Byte() = Nothing Dim contextLength As UInteger If Not obj.Equals(DBNull.Value) Then txContext = DirectCast(obj, Byte()) contextLength = txContext.Length() Else Dim message As String = "GET_FILESTREAM_TRANSACTION_CONTEXT() failed" Throw New System.Exception(message) End If '3. 获取 Win32 句柄,并使用该句柄在 FILESTREAM BLOB 中读取和写入数据 Using sqlFileStream As New SqlFileStream(filePath, txContext, FileAccess.Write) Dim buffer As Byte() = New Byte(bufferSize - 1) {} Dim numBytes As Integer = 0 Using fsRead As New FileStream(file, FileMode.Open) While True numBytes = fsRead.Read(buffer, 0, bufferSize) If numBytes = 0 Then Exit While sqlFileStream.Write(buffer, 0, numBytes) Console.WriteLine(String.Format("{0} -> {1} -> {2}", fsRead.Position, sqlFileStream.Position, numBytes)) End While fsRead.Close() End Using sqlFileStream.Close() End Using sqlCmd.Transaction.Commit() End Using End Sub ''' <summary> ''' 从数据库读取数据保存到文件 ''' </summary> ''' <param name="conn">数据库连接</param> ''' <param name="name">名称</param> ''' <param name="file">文件名</param> Sub Read(ByVal conn As SqlConnection, ByVal name As String, ByVal file As String) Dim bufferSize As Int32 = 1024 Using sqlCmd As New SqlCommand sqlCmd.Connection = conn '1. 读取 FILESTREAM 文件路径 ( 注意函数大小写 ) sqlCmd.CommandText = "SELECT content.PathName() FROM _test.dbo.tb_fs WHERE name = @name;" sqlCmd.Parameters.Add(New SqlParameter("name", name)) Dim filePath As String = Nothing Dim pathObj As Object = sqlCmd.ExecuteScalar() If Not pathObj.Equals(DBNull.Value) Then filePath = DirectCast(pathObj, String) Else Throw New System.Exception("content.PathName() failed to read the path name for the content column.") End If '2. 读取当前事务上下文 Dim transaction As SqlTransaction = conn.BeginTransaction("mainTranaction") sqlCmd.Transaction = transaction sqlCmd.CommandText = "SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()" Dim obj As Object = sqlCmd.ExecuteScalar() Dim txContext As Byte() = Nothing Dim contextLength As UInteger If Not obj.Equals(DBNull.Value) Then txContext = DirectCast(obj, Byte()) contextLength = txContext.Length() Else Dim message As String = "GET_FILESTREAM_TRANSACTION_CONTEXT() failed" Throw New System.Exception(message) End If '3. 获取 Win32 句柄,并使用该句柄在 FILESTREAM BLOB 中读取和写入数据 Using sqlFileStream As New SqlFileStream(filePath, txContext, FileAccess.Read) Dim buffer As Byte() = New Byte(bufferSize - 1) {} Dim numBytes As Integer = 0 Using fsRead As New FileStream(file, FileMode.Create) While True numBytes = sqlFileStream.Read(buffer, 0, bufferSize) If numBytes = 0 Then Exit While fsRead.Write(buffer, 0, numBytes) Console.WriteLine(String.Format("{0} -> {1} -> {2}", sqlFileStream.Position, sqlFileStream.Position, numBytes)) End While fsRead.Close() End Using sqlFileStream.Close() End Using sqlCmd.Transaction.Commit() End Using End Sub End Module
この記事では、SQL Server FileStream にアクセスする方法について説明します。関連コンテンツの詳細については、php 中国語 Web サイトを参照してください。
関連する推奨事項:
SQL Server 管理者のパスワードを忘れた場合の対処方法
MySQL での concat と group_concat の使用の簡単な分析
以上が進行状況とともに SQL Server FileStream にアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









このウェブサイトは3月7日、ファーウェイのデータストレージ製品ラインの社長である周岳峰博士が最近MWC2024カンファレンスに出席し、特にウォームデータ(WarmData)とコールドデータ(ColdData)用に設計された新世代のOceanStorArctic磁電ストレージソリューションをデモンストレーションしたと報じた。ファーウェイのデータストレージ製品ラインの社長である周岳峰氏は、一連の革新的なソリューションをリリースした 画像出典: このサイトに添付されているファーウェイの公式プレスリリースは次のとおりです: このソリューションのコストは磁気テープのコストより 20% 低く、そのコストは磁気テープのコストよりも 20% 低くなります。消費電力はハードディスクよりも90%低いです。外国のテクノロジーメディアのblocksandfilesによると、ファーウェイの広報担当者も磁気電子ストレージソリューションに関する情報を明らかにした:ファーウェイの磁気電子ディスク(MED)は磁気ストレージメディアの主要な革新である。初代ME

Vue3+TS+Vite 開発のヒント: データを暗号化して保存する方法 インターネット技術の急速な発展に伴い、データ セキュリティとプライバシー保護がますます重要になっています。 Vue3+TS+Vite 開発環境では、データをどのように暗号化して保存するかが、すべての開発者が直面する必要がある問題です。この記事では、開発者がアプリケーションのセキュリティとユーザー エクスペリエンスを向上させるのに役立つ、一般的なデータ暗号化とストレージのテクニックをいくつか紹介します。 1. データ暗号化 フロントエンド データ暗号化 フロントエンド暗号化は、データ セキュリティを保護するための重要な部分です。よく使われる

キャッシュとは何ですか?キャッシュ (カシェイと発音) は、頻繁に要求されるデータや命令を保存するために使用される特殊な高速ハードウェアまたはソフトウェア コンポーネントであり、Web サイト、アプリケーション、サービス、およびシステムのその他の側面をより高速に読み込むために使用できます。 。キャッシュにより、最も頻繁にアクセスされるデータがすぐに利用できるようになります。キャッシュ ファイルはキャッシュ メモリとは異なります。キャッシュ ファイルとは、複数のプログラムで必要になる可能性がある、PNG、アイコン、ロゴ、シェーダーなどの頻繁に必要なファイルを指します。これらのファイルは物理ドライブ領域に保存され、通常は隠されています。一方、キャッシュ メモリは、メイン メモリや RAM よりも高速なメモリのタイプです。 CPUに近く、RAMに比べて高速なため、データアクセス時間が大幅に短縮されます。

Git は、高速で信頼性が高く、適応性に優れた分散バージョン管理システムです。分散型の非線形ワークフローをサポートするように設計されており、あらゆる規模のソフトウェア開発チームに最適です。各 Git 作業ディレクトリは、すべての変更の完全な履歴を備えた独立したリポジトリであり、ネットワーク アクセスや中央サーバーがなくてもバージョンを追跡できます。 GitHub は、分散リビジョン管理のすべての機能を提供する、クラウド上でホストされる Git リポジトリです。 GitHub は、クラウド上でホストされる Git リポジトリです。 CLI ツールである Git とは異なり、GitHub には Web ベースのグラフィカル ユーザー インターフェイスがあります。これは、他の開発者との共同作業や、スクリプトへの変更の追跡などのバージョン管理に使用されます。

sessionStorage を正しく使用して機密情報を保存する方法には、特定のコード サンプルが必要です。Web 開発でもモバイル アプリケーション開発でも、ユーザーのログイン資格情報や ID 番号などの機密情報を保存して処理する必要があることがよくあります。フロントエンド開発では、sessionStorage の使用が一般的なストレージ ソリューションです。ただし、sessionStorage はブラウザベースのストレージであるため、保存されている機密情報が悪意を持ってアクセスされ、使用されないように、いくつかのセキュリティ問題に注意を払う必要があります。

Microsoft SQL Server は、Microsoft によって発売されたリレーショナル データベース管理システムです。統合されたビジネス インテリジェンス (BI) ツールを使用してエンタープライズ レベルのデータ管理を提供する包括的なデータベース プラットフォームです。使いやすく、拡張性が高く、高いパフォーマンスを備えています。関連ソフトウェアとの統合度が高く、高い利点があります。 SQL Server データベース エンジンは、リレーショナル データと構造化データに対して、より安全で信頼性の高いストレージ機能を提供し、ユーザーがビジネス向けに可用性とパフォーマンスの高いデータ アプリケーションを構築および管理できるようにします。

PHP と swoole はどのようにして効率的なデータのキャッシュとストレージを実現するのでしょうか?概要: Web アプリケーション開発では、データのキャッシュとストレージは非常に重要な部分です。 PHP と swoole は、データをキャッシュして保存するための効率的な方法を提供します。この記事では、PHP と swoole を使用して効率的なデータ キャッシュとストレージを実現する方法を紹介し、対応するコード例を示します。 1. swoole の紹介: swoole は、PHP 言語用に開発された高性能の非同期ネットワーク通信エンジンです。

SQLServer それとも MySQL?最新の調査により最適なデータベースの選択が明らかに 近年、インターネットやビッグデータの急速な発展に伴い、データベースの選択は企業や開発者にとって重要な課題となっています。多くのデータベースの中でも、最も一般的で広く使用されている 2 つのリレーショナル データベースである SQL Server と MySQL は、非常に物議を醸しています。では、SQLServer と MySQL のどちらを選択すればよいでしょうか?最新の研究により、この問題が明らかになりました。まず、
