Maison base de données tutoriel mysql Comment accéder à SQL Server FileStream avec progression

Comment accéder à SQL Server FileStream avec progression

Jun 15, 2018 am 09:21 AM
sql server 存储

Aide en ligne de référence détaillée pour la fonction SQL Server FileStream permettant de concevoir et d'implémenter le stockage FILESTREAM
Voici juste un ajustement du code qui utilise Win32 pour gérer les données FILESTREAM afin d'obtenir un accès progressif, ce qui est meilleur pour accéder à des fichiers plus volumineux.
Pour utiliser FileStream, activez d'abord l'option FileStream dans le Gestionnaire de configuration SQL Server : Gestionnaire de configuration SQL Server – Service SQL Server – Rechercher le service SQL Server – Propriétés – FILESTREAM – Autoriser les clients distants à accéder aux données FILESTREAM selon leurs besoins dans la liste des services à droite. Sélectionnez, sélectionnez les deux autres recommandations. Une fois la configuration terminée, vous devez redémarrer le service SQL Server pour que les paramètres prennent effet.
Utilisez ensuite le script suivant pour créer la base de données de test et la table de test

 -- =========================================================-- 启用 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
Copier après la connexion
下面的 VB 脚本实现带进度显示的文件存(Write方法)取(Read方法)
Copier après la connexion
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    &#39;&#39;&#39; <summary>
    &#39;&#39;&#39; 将文件保存到数据库    &#39;&#39;&#39; </summary>
    &#39;&#39;&#39; <param name="conn">数据库连接</param>    &#39;&#39;&#39; <param name="name">名称</param>
    &#39;&#39;&#39; <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            &#39;事务
            Dim transaction As SqlTransaction = conn.BeginTransaction("mainTranaction")
            sqlCmd.Transaction = transaction
            &#39;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
            &#39;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
            &#39;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    &#39;&#39;&#39; <summary>
    &#39;&#39;&#39; 从数据库读取数据保存到文件    &#39;&#39;&#39; </summary>
    &#39;&#39;&#39; <param name="conn">数据库连接</param>    &#39;&#39;&#39; <param name="name">名称</param>
    &#39;&#39;&#39; <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            &#39;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
            &#39;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
            &#39;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
Copier après la connexion

Cet article explique comment accéder à SQL Server FileStream avec progression. Pour plus de contenu connexe, veuillez prêter attention au . php site chinois.

Recommandations associées :

Que faire si vous oubliez le mot de passe de l'administrateur SQL Server

Une brève analyse de concat et group_concat dans MySQL Utilisation

Présentation de l'outil de gestion graphique MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Huawei lancera l'année prochaine des produits de stockage MED innovants : la capacité du rack dépasse 10 Po et la consommation électrique est inférieure à 2 kW Huawei lancera l'année prochaine des produits de stockage MED innovants : la capacité du rack dépasse 10 Po et la consommation électrique est inférieure à 2 kW Mar 07, 2024 pm 10:43 PM

Ce site Web a rapporté le 7 mars que le Dr Zhou Yuefeng, président de la gamme de produits de stockage de données de Huawei, a récemment assisté à la conférence MWC2024 et a spécifiquement présenté la solution de stockage magnétoélectrique OceanStorArctic de nouvelle génération conçue pour les données chaudes (WarmData) et les données froides (ColdData). Zhou Yuefeng, président de la gamme de produits de stockage de données de Huawei, a publié une série de solutions innovantes Source de l'image : Le communiqué de presse officiel de Huawei joint à ce site est le suivant : Le coût de cette solution est 20 % inférieur à celui de la bande magnétique, et son coût est de 20 % inférieur à celui de la bande magnétique. la consommation électrique est 90 % inférieure à celle des disques durs. Selon les médias technologiques étrangers blockandfiles, un porte-parole de Huawei a également révélé des informations sur la solution de stockage magnétoélectrique : le disque magnétoélectronique (MED) de Huawei est une innovation majeure dans le domaine des supports de stockage magnétiques. ME de première génération

Compétences en développement Vue3+TS+Vite : comment chiffrer et stocker des données Compétences en développement Vue3+TS+Vite : comment chiffrer et stocker des données Sep 10, 2023 pm 04:51 PM

Conseils de développement Vue3+TS+Vite : Comment crypter et stocker des données Avec le développement rapide de la technologie Internet, la sécurité des données et la protection de la vie privée deviennent de plus en plus importantes. Dans l'environnement de développement Vue3+TS+Vite, comment chiffrer et stocker les données est un problème auquel chaque développeur doit faire face. Cet article présentera certaines techniques courantes de cryptage et de stockage des données pour aider les développeurs à améliorer la sécurité des applications et l'expérience utilisateur. 1. Chiffrement des données Chiffrement des données frontal Le chiffrement frontal est un élément important de la protection de la sécurité des données. Couramment utilisé

Comment vider le cache sous Windows 11 : Tutoriel détaillé avec images Comment vider le cache sous Windows 11 : Tutoriel détaillé avec images Apr 24, 2023 pm 09:37 PM

Qu’est-ce que le cache ? Un cache (prononcé ka·shay) est un composant matériel ou logiciel spécialisé à haute vitesse utilisé pour stocker des données et des instructions fréquemment demandées, qui à leur tour peuvent être utilisées pour charger plus rapidement des sites Web, des applications, des services et d'autres aspects du système. . La mise en cache rend les données les plus fréquemment consultées facilement disponibles. Les fichiers cache ne sont pas identiques à la mémoire cache. Les fichiers cache font référence aux fichiers fréquemment nécessaires tels que les fichiers PNG, les icônes, les logos, les shaders, etc., qui peuvent être requis par plusieurs programmes. Ces fichiers sont stockés dans votre espace disque physique, généralement cachés. La mémoire cache, quant à elle, est un type de mémoire plus rapide que la mémoire principale et/ou la RAM. Il réduit considérablement le temps d'accès aux données car il est plus proche du CPU et plus rapide que la RAM.

Processus d'installation de Git sur Ubuntu Processus d'installation de Git sur Ubuntu Mar 20, 2024 pm 04:51 PM

Git est un système de contrôle de version distribué rapide, fiable et adaptable. Il est conçu pour prendre en charge des flux de travail distribués et non linéaires, ce qui le rend idéal pour les équipes de développement de logiciels de toutes tailles. Chaque répertoire de travail Git est un référentiel indépendant avec un historique complet de toutes les modifications et la possibilité de suivre les versions même sans accès au réseau ni serveur central. GitHub est un référentiel Git hébergé sur le cloud qui fournit toutes les fonctionnalités du contrôle de révision distribué. GitHub est un référentiel Git hébergé sur le cloud. Contrairement à Git qui est un outil CLI, GitHub dispose d'une interface utilisateur graphique basée sur le Web. Il est utilisé pour le contrôle de version, ce qui implique de collaborer avec d'autres développeurs et de suivre les modifications apportées aux scripts et aux scripts au fil du temps.

Comment utiliser correctement sessionStorage pour protéger les données sensibles Comment utiliser correctement sessionStorage pour protéger les données sensibles Jan 13, 2024 am 11:54 AM

Comment utiliser correctement sessionStorage pour stocker des informations sensibles nécessite des exemples de code spécifiques Que ce soit dans le développement Web ou le développement d'applications mobiles, nous devons souvent stocker et traiter des informations sensibles, telles que les informations de connexion des utilisateurs, les numéros d'identification, etc. Dans le développement front-end, l'utilisation de sessionStorage est une solution de stockage courante. Cependant, étant donné que sessionStorage est un stockage basé sur un navigateur, certains problèmes de sécurité doivent être pris en compte pour garantir que les informations sensibles stockées ne soient pas consultées et utilisées de manière malveillante.

Quel logiciel est Microsoft SQL Server ? Quel logiciel est Microsoft SQL Server ? Feb 28, 2023 pm 03:00 PM

Microsoft SQL Server est un système de gestion de base de données relationnelle lancé par Microsoft. Il s'agit d'une plate-forme de base de données complète qui utilise des outils de business intelligence (BI) intégrés pour fournir une gestion des données au niveau de l'entreprise. Elle est facile à utiliser, a une bonne évolutivité et a un niveau élevé. degré d'intégration avec les logiciels associés. Avantages élevés. Le moteur de base de données SQL Server fournit des fonctions de stockage plus sécurisées et plus fiables pour les données relationnelles et les données structurées, permettant aux utilisateurs de créer et de gérer des applications de données hautement disponibles et performantes pour les entreprises.

Comment PHP et Swoole parviennent-ils à une mise en cache et un stockage efficaces des données ? Comment PHP et Swoole parviennent-ils à une mise en cache et un stockage efficaces des données ? Jul 23, 2023 pm 04:03 PM

Comment PHP et Swoole parviennent-ils à une mise en cache et un stockage efficaces des données ? Présentation : Dans le développement d'applications Web, la mise en cache et le stockage des données sont un élément très important. PHP et swoole fournissent une méthode efficace pour mettre en cache et stocker des données. Cet article présentera comment utiliser PHP et swoole pour obtenir une mise en cache et un stockage efficaces des données, et donnera des exemples de code correspondants. 1. Introduction à swoole : swoole est un moteur de communication réseau asynchrone hautes performances développé pour le langage PHP.

Comprendre les tableaux d'intelligence artificielle dans un seul article : commencer avec MindsDB Comprendre les tableaux d'intelligence artificielle dans un seul article : commencer avec MindsDB Apr 12, 2023 pm 12:04 PM

Cet article est réimprimé du compte public WeChat « Vivre à l'ère de l'information ». L'auteur vit à l'ère de l'information. Pour réimprimer cet article, veuillez contacter le compte public Vivre à l’ère de l’information. Pour les étudiants familiarisés avec les opérations de base de données, écrire de belles instructions SQL et trouver des moyens de trouver les données dont ils ont besoin dans la base de données est une opération de routine. Pour les étudiants familiarisés avec l'apprentissage automatique, il s'agit également d'une opération de routine consistant à obtenir des données, à prétraiter les données, à créer un modèle, à déterminer l'ensemble de formation et l'ensemble de test, et à utiliser le modèle formé pour faire une série de prédictions sur l'avenir. Alors, peut-on combiner les deux technologies ? Nous voyons que les données sont stockées dans la base de données et que les prédictions doivent être basées sur des données passées. Si nous interrogeons les données futures via les données existantes dans la base de données, alors il est

See all articles