Использование CLR для доступа к метаданным на MSSQL сервере. deflate

26.06.23

Разработка - Механизмы платформы 1С

Использование CLR для доступа к метаданным на MSSQL сервере. Реализация примитивного deflate

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Использование CLR для доступа к метаданным на MSSQL сервере.:
.7z 1,49Kb
34
34 Скачать бесплатно

Метод основан на использовании CLR интеграции. ковырялся из любопытства. Может кому пригодятся наработки. MSSQL не ниже 2005 сервера

using System.IO.Compression;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

namespace MysqlFunc
{
    public partial class MysqlFunc
    {
        [SqlFunction()]
        public static SqlBytes Sqldeflate(SqlBytes param)
        {
            DeflateStream deflstrm = new System.IO.Compression.DeflateStream(param.Stream, CompressionMode.Decompress);
            return new SqlBytes(deflstrm);
        }

        [SqlFunction()]
        public static SqlBytes Sqlinflate(SqlBytes param)
        {
            DeflateStream deflstrm = new System.IO.Compression.DeflateStream(param.Stream, CompressionMode.Compress);
            return new SqlBytes(deflstrm);
        }
    }
}


На сервере mssql нужно выполнить следующий скрипт однократно

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
sp_configure 'CLR strict security', 0; -- это начиная с версии 2019 вроде и нужен потому что не подписывал код
Go
RECONFIGURE;
GO

Это разрешит использование CLR.
теперь подключим наш проект

CREATE ASSEMBLY [SqlMyProj]
AUTHORIZATION [dbo]
FROM 'C:\\vc\\p1\\My.dll'  -- указать путь до dll
WITH PERMISSION_SET = SAFE
GO

Далее объявим функции

CREATE FUNCTION [dbo].[CLRdeflate](@inbyte [varbinary](max))
RETURNS [varbinary](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlMyProj].[MysqlFunc.MysqlFunc].[Sqldeflate]
GO

CREATE FUNCTION [dbo].[CLRinflate](@inbyte [varbinary](max))
RETURNS [varbinary](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlMyProj].[MysqlFunc.MysqlFunc].[Sqlinflate]
GO

 

Итак  теперь мы можем использовать наши функции в конструкции

 

SELECT  dbo.CLRdeflate(BinaryData)
FROM dbo.Config 
WHERE FileName='000c05d9-cbd7-4ce7-9afc-b4e4378acf16.0' --здесь нужный файл 

на mssql начиная с 2019 можно прям там работать с UTF-8 

пример

DECLARE @t TABLE(s VARCHAR(MAX) COLLATE Cyrillic_General_100_CI_AS_SC_UTF8);
INSERT INTO @t
SELECT  dbo.CLRdeflate(BinaryData)
FROM dbo.Config 
WHERE FileName='000c05d9-cbd7-4ce7-9afc-b4e4378acf16.0' --здесь нужный файл или можно все перекодировать
SELECT * FROM @t

теоретически если задать COLLATE при создании базы сразу UTF-8 - можно обойтись простым cast  varchar(max)

не знаю, поддерживает ли 1C базы с UTF-8. Не экспериментировал однако =)

Во вложении исходник и скомпилированная dll.

в скрипте не забудьте путь до dll поменять на свой.

компилировал так

 %windir%\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:library .\My.cs

в проект легко можно добавить функцию для перекодирования utf-8.

З.Ы. и еще парсер десереализации =)) и потом упаковки в xml ... и посмотреть , мож быстрее 1Cного метода выгрузки конфигурации будет ))

MSSQL SQL CLR DEFLATE

См. также

Механизмы платформы 1С Программист Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    5619    dsdred    40    

91

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    9938    bayselonarrend    21    

161

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    7159    dsdred    18    

81

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    23085    YA_418728146    28    

73

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    25309    SeiOkami    48    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Gamm 13 29.07.09 10:52 Сейчас в теме
2. MiCe 12 29.07.09 10:52 Сейчас в теме
млин... почему не добавляется текст статьи?
3. MiCe 12 29.07.09 12:07 Сейчас в теме
=)... текст вызвал подозрение на взлом... хотя я обрамлял тэгом code
Tatitutu; +1 Ответить
4. пользователь 13.05.15 11:21
Сообщение было скрыто модератором.
...
5. Armando 1402 14.08.16 21:49 Сейчас в теме
Не совсем понял что с этим делать. Если компилировать то как? Компилятор csc.exe ошибку выдает
Оставьте свое сообщение