INSERT INTO Player([Name],[Surname],[Info])
VALUES('John','Smith',COMPRESS(N'{"sport":"Tennis","age": 28,"rank":1,"points":15258, turn":17}'))
Но есть ли способ воспроизвести этот метод SQL Compress в C#, по существу сжимая код перед вставкой в базу данных, а затем имея возможность распаковать его в запросе чтения SQL? Я попробовал несколько вариантов следующего кода:
Как я могу воспроизвести функцию сжатия, которую можно использовать в запросе на вставку SQL? Я знаю, что могу сделать следующее: [code] INSERT INTO Player([Name],[Surname],[Info]) VALUES('John','Smith',COMPRESS(N'{"sport":"Tennis","age": 28,"rank":1,"points":15258, turn":17}')) [/code] Но есть ли способ воспроизвести этот метод SQL Compress в C#, по существу сжимая код перед вставкой в базу данных, а затем имея возможность распаковать его в запросе чтения SQL? Я попробовал несколько вариантов следующего кода: [code] private readonly string _insertQuery = @"INSERT INTO Player([Name],[Surname],[Info]) OUTPUT INSERTED.Id, inserted.Info VALUES(?,?,?)";
public void CompressAndWriteToDB() { using OleDbConnection connection = new(_connectionString);
var uncompressedString = "{\"sport\":\"Basketball\",\"age\": 45,\"rank\":1,\"points\":15258, turn\":17}"; var bytes = Encoding.UTF8.GetBytes(uncompressedString);
using (var memoryStream = new MemoryStream()) { using (var gzipStream = new GZipStream(memoryStream, CompressionLevel.Optimal)) { gzipStream.Write(bytes, 0, bytes.Length); } var param = cmd.Parameters.Add("@info", SqlDbType.VarBinary); param.Value = memoryStream.ToArray(); }
cmd.Connection = connection;
connection.Open();
cmd.ExecuteReader(); } [/code] Но когда я пытаюсь распаковать эти данные в SSMS с помощью метода SQL Decompress, я получаю только странные символы: [img] https://i.sstatic.net/4igAIJLj.png[/img]