Table des matières
解剖SQLSERVER 第三篇  数据类型的实现(译)
Maison base de données tutoriel mysql 解剖SQLSERVER 第三篇 数据类型的实现(译)

解剖SQLSERVER 第三篇 数据类型的实现(译)

Jun 07, 2016 pm 03:20 PM
sqlserver 实现 数据 类型

解剖SQLSERVER 第三篇 数据类型的实现(译) http://improve.dk/implementing-data-types-in-orcamdf/ 实现对SQLSERVER数据类型的解析在OrcaMDF 软件里面是一件比较简单的事,只需要实现ISqlType 接口 public interface ISqlType{ bool IsVariableLength { g

解剖SQLSERVER 第三篇  数据类型的实现(译)

 

http://improve.dk/implementing-data-types-in-orcamdf/

实现对SQLSERVER数据类型的解析在OrcaMDF 软件里面是一件比较简单的事,只需要实现ISqlType 接口

<span>public</span> <span>interface</span><span> ISqlType
{
    </span><span>bool</span> IsVariableLength { <span>get</span><span>; }
    </span><span>short</span>? FixedLength { <span>get</span><span>; }
    </span><span>object</span> GetValue(<span>byte</span><span>[] value);
}</span>
Copier après la connexion

IsVariableLength 返回数据类型是否是定长的还是变长的。

FixedLength 返回定长数据类型的长度,否则他返回null

数据类型解释器不关心变长字段的长度,输入的字节大小会决定长度

最后,GetValue 将输入字节参数进行解释并将字节解释为相关的.NET对象

 

 

SqlInt实现

int类型作为定长类型是非常简单的,能直接使用BitConverter进行转换

<span>public</span> <span>class</span><span> SqlInt : ISqlType
{
    </span><span>public</span> <span>bool</span><span> IsVariableLength
    {
        </span><span>get</span> { <span>return</span> <span>false</span><span>; }
    }

    </span><span>public</span> <span>short</span>?<span> FixedLength
    {
        </span><span>get</span> { <span>return</span> <span>4</span><span>; }
    }

    </span><span>public</span> <span>object</span> GetValue(<span>byte</span><span>[] value)
    {
        </span><span>if</span> (value.Length != <span>4</span><span>)
            </span><span>throw</span> <span>new</span> ArgumentException(<span>"</span><span>Invalid value length: </span><span>"</span> +<span> value.Length);

        </span><span>return</span> BitConverter.ToInt32(value, <span>0</span><span>);
    }
}</span>
Copier après la connexion

 

相关测试

<span>[TestFixture]
</span><span>public</span> <span>class</span><span> SqlIntTests
{
    [Test]
    </span><span>public</span> <span>void</span><span> GetValue()
    {
        </span><span>var</span> type = <span>new</span><span> SqlInt();
        </span><span>byte</span><span>[] input;

        input </span>= <span>new</span> <span>byte</span>[] { <span>0x5e</span>, <span>0x3b</span>, <span>0x27</span>, <span>0x2a</span><span> };
        Assert.AreEqual(</span><span>707214174</span><span>, Convert.ToInt32(type.GetValue(input)));

        input </span>= <span>new</span> <span>byte</span>[] { <span>0x8d</span>, <span>0xf9</span>, <span>0xaa</span>, <span>0x30</span><span> };
        Assert.AreEqual(</span><span>816511373</span><span>, Convert.ToInt32(type.GetValue(input)));

        input </span>= <span>new</span> <span>byte</span>[] { <span>0x7a</span>, <span>0x4a</span>, <span>0x72</span>, <span>0xe2</span><span> };
        Assert.AreEqual(</span>-<span>495826310</span><span>, Convert.ToInt32(type.GetValue(input)));
    }

    [Test]
    </span><span>public</span> <span>void</span><span> Length()
    {
        </span><span>var</span> type = <span>new</span><span> SqlInt();

        Assert.Throws</span><argumentexception>(() => type.GetValue(<span>new</span> <span>byte</span>[<span>3</span><span>]));
        Assert.Throws</span><argumentexception>(() => type.GetValue(<span>new</span> <span>byte</span>[<span>5</span><span>]));
    }
}</span></argumentexception></argumentexception>
Copier après la connexion

 

 

SqlNVarchar 实现

nvarchar 类型也是非常简单的,注意,如果是可变长度我们返回长度的结果是null

ISqlType 接口实现必须是无状态的

GetValue 简单的将输入的字节的数进行转换,这将转换为相关的.NET 类型,这里是string类型

<span>public</span> <span>class</span><span> SqlNVarchar : ISqlType
{
    </span><span>public</span> <span>bool</span><span> IsVariableLength
    {
        </span><span>get</span> { <span>return</span> <span>true</span><span>; }
    }

    </span><span>public</span> <span>short</span>?<span> FixedLength
    {
        </span><span>get</span> { <span>return</span> <span>null</span><span>; }
    }

    </span><span>public</span> <span>object</span> GetValue(<span>byte</span><span>[] value)
    {
        </span><span>return</span><span> Encoding.Unicode.GetString(value);
    }
}</span>
Copier après la connexion

 

相关测试

<span>[TestFixture]
</span><span>public</span> <span>class</span><span> SqlNvarcharTests
{
    [Test]
    </span><span>public</span> <span>void</span><span> GetValue()
    {
        </span><span>var</span> type = <span>new</span><span> SqlNVarchar();
        </span><span>byte</span>[] input = <span>new</span> <span>byte</span>[] { <span>0x47</span>, <span>0x04</span>, <span>0x2f</span>, <span>0x04</span>, <span>0xe6</span>, <span>0x00</span><span> };

        Assert.AreEqual(</span><span>"</span><span>u0447u042fu00e6</span><span>"</span>, (<span>string</span><span>)type.GetValue(input));
    }
}</span>
Copier après la connexion

其他类型的实现

OrcaMDF 软件现在支持12种数据类型,以后将会支持datetime和bit类型,因为这两个类型相比起其他类型有些特殊

其余类型我以后也将会进行实现

 

第三篇完

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)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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)

Comment résoudre le problème selon lequel l'objet nommé existe déjà dans la base de données sqlserver Comment résoudre le problème selon lequel l'objet nommé existe déjà dans la base de données sqlserver Apr 05, 2024 pm 09:42 PM

Pour les objets du même nom qui existent déjà dans la base de données SQL Server, les étapes suivantes doivent être suivies : Confirmez le type d'objet (table, vue, procédure stockée). IF NOT EXISTS peut être utilisé pour ignorer la création si l'objet est vide. Si l'objet contient des données, utilisez un nom différent ou modifiez la structure. Utilisez DROP pour supprimer des objets existants (soyez prudent, sauvegarde recommandée). Vérifiez les modifications de schéma pour vous assurer qu'il n'y a aucune référence à des objets supprimés ou renommés.

Comment importer un fichier mdf dans sqlserver Comment importer un fichier mdf dans sqlserver Apr 08, 2024 am 11:41 AM

Les étapes d'importation sont les suivantes : Copiez le fichier MDF dans le répertoire de données de SQL Server (généralement C:\Program Files\Microsoft SQL Server\MSSQL\DATA). Dans SQL Server Management Studio (SSMS), ouvrez la base de données et sélectionnez Attacher. Cliquez sur le bouton Ajouter et sélectionnez le fichier MDF. Confirmez le nom de la base de données et cliquez sur le bouton OK.

Que faire si le service sqlserver ne peut pas être démarré Que faire si le service sqlserver ne peut pas être démarré Apr 05, 2024 pm 10:00 PM

Lorsque le service SQL Server ne parvient pas à démarrer, voici quelques étapes à résoudre : Consultez le journal des erreurs pour déterminer la cause première. Assurez-vous que le compte de service est autorisé à démarrer le service. Vérifiez si les services de dépendance sont en cours d'exécution. Désactivez le logiciel antivirus. Réparez l'installation de SQL Server. Si la réparation ne fonctionne pas, réinstallez SQL Server.

Comment vérifier le numéro de port sqlserver Comment vérifier le numéro de port sqlserver Apr 05, 2024 pm 09:57 PM

Pour afficher le numéro de port SQL Server : Ouvrez SSMS et connectez-vous au serveur. Recherchez le nom du serveur dans l'Explorateur d'objets, cliquez dessus avec le bouton droit et sélectionnez Propriétés. Dans l'onglet Connexion, affichez le champ Port TCP.

Comment récupérer une base de données supprimée accidentellement dans SQLserver Comment récupérer une base de données supprimée accidentellement dans SQLserver Apr 05, 2024 pm 10:39 PM

Si vous supprimez accidentellement une base de données SQL Server, vous pouvez suivre les étapes suivantes pour la récupérer : arrêter l'activité de la base de données ; sauvegarder les fichiers journaux ; vérifier les options de récupération : restaurer à partir d'une sauvegarde ; utiliser DBCC CHECKDB ; outils de fête. Veuillez sauvegarder régulièrement votre base de données et activer la journalisation des transactions pour éviter toute perte de données.

La vitalité de la super intelligence s'éveille ! Mais avec l'arrivée de l'IA qui se met à jour automatiquement, les mères n'ont plus à se soucier des goulots d'étranglement des données. La vitalité de la super intelligence s'éveille ! Mais avec l'arrivée de l'IA qui se met à jour automatiquement, les mères n'ont plus à se soucier des goulots d'étranglement des données. Apr 29, 2024 pm 06:55 PM

Je pleure à mort. Le monde construit à la folie de grands modèles. Les données sur Internet ne suffisent pas du tout. Le modèle de formation ressemble à « The Hunger Games », et les chercheurs en IA du monde entier se demandent comment nourrir ces personnes avides de données. Ce problème est particulièrement important dans les tâches multimodales. À une époque où rien ne pouvait être fait, une équipe de start-up du département de l'Université Renmin de Chine a utilisé son propre nouveau modèle pour devenir la première en Chine à faire de « l'auto-alimentation des données générées par le modèle » une réalité. De plus, il s’agit d’une approche à deux volets, du côté compréhension et du côté génération, les deux côtés peuvent générer de nouvelles données multimodales de haute qualité et fournir un retour de données au modèle lui-même. Qu'est-ce qu'un modèle ? Awaker 1.0, un grand modèle multimodal qui vient d'apparaître sur le Forum Zhongguancun. Qui est l'équipe ? Moteur Sophon. Fondé par Gao Yizhao, doctorant à la Hillhouse School of Artificial Intelligence de l’Université Renmin.

Comment supprimer sqlserver si l'installation échoue ? Comment supprimer sqlserver si l'installation échoue ? Apr 05, 2024 pm 11:27 PM

Si l'installation de SQL Server échoue, vous pouvez la nettoyer en suivant ces étapes : Désinstaller SQL Server Supprimer les clés de registre Supprimer les fichiers et dossiers Redémarrer l'ordinateur

Vitesse Internet lente des données cellulaires sur iPhone : correctifs Vitesse Internet lente des données cellulaires sur iPhone : correctifs May 03, 2024 pm 09:01 PM

Vous êtes confronté à un décalage et à une connexion de données mobile lente sur iPhone ? En règle générale, la puissance de l'Internet cellulaire sur votre téléphone dépend de plusieurs facteurs tels que la région, le type de réseau cellulaire, le type d'itinérance, etc. Vous pouvez prendre certaines mesures pour obtenir une connexion Internet cellulaire plus rapide et plus fiable. Correctif 1 – Forcer le redémarrage de l'iPhone Parfois, le redémarrage forcé de votre appareil réinitialise simplement beaucoup de choses, y compris la connexion cellulaire. Étape 1 – Appuyez simplement une fois sur la touche d’augmentation du volume et relâchez-la. Ensuite, appuyez sur la touche de réduction du volume et relâchez-la à nouveau. Étape 2 – La partie suivante du processus consiste à maintenir le bouton sur le côté droit. Laissez l'iPhone finir de redémarrer. Activez les données cellulaires et vérifiez la vitesse du réseau. Vérifiez à nouveau Correctif 2 – Changer le mode de données Bien que la 5G offre de meilleures vitesses de réseau, elle fonctionne mieux lorsque le signal est plus faible

See all articles