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

26.06.23

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

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

Скачать исходный код

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

Метод основан на использовании 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 Конфигурации 1cv8 Бесплатно (free)

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

13.03.2024    2524    dsdred    16    

57

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5781    dsdred    53    

81

Как готовить и есть массивы

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

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

24.01.2024    5779    YA_418728146    25    

67

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6907    dsdred    36    

113

1С-ная магия

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

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

06.10.2023    18987    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12653    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9324    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6502    sebekerga    54    

95
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 1399 14.08.16 21:49 Сейчас в теме
Не совсем понял что с этим делать. Если компилировать то как? Компилятор csc.exe ошибку выдает
Оставьте свое сообщение