Я знаю, что могу сделать следующее:
Код: Выделить всё
INSERT INTO Player ([Name], [Surname], [Info])
VALUES ('John', 'Smith', COMPRESS(N'{"sport":"Tennis","age": 28,"rank":1,"points":15258, turn":17}'))
Я пробовал несколько вариантов следующего кода:
Код: Выделить всё
private readonly string _insertQuery =
@"INSERT INTO Player([Name],[Surname],[Info])
OUTPUT INSERTED.Id, inserted.Info
VALUES(?,?,?)";
public void CompressAndWriteToDB()
{
using OleDbConnection connection = new(_connectionString);
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = _insertQuery;
cmd.Parameters.Add(new OleDbParameter("@name", "John"));
cmd.Parameters.Add(new OleDbParameter("@surname", "Smith"));
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();
}

Подробнее здесь: https://stackoverflow.com/questions/791 ... press-in-c
Мобильная версия