Skip to content

Instantly share code, notes, and snippets.

@MarkPflug
Created January 31, 2019 23:48
Show Gist options
  • Save MarkPflug/b46cdc748bdf71258a4812dd4d809858 to your computer and use it in GitHub Desktop.
Save MarkPflug/b46cdc748bdf71258a4812dd4d809858 to your computer and use it in GitHub Desktop.
Read binary(16) and rowversion
using System;
using System.Data.SqlClient;
using System.Runtime.InteropServices;
class Program
{
static void Main()
{
var dbName = "Test" + DateTime.Now.ToString("yyyyMMddHHmmss");
var createSql = "create table Data (Id int identity, Payload binary(16), Version rowversion, constraint PK_Data primary key (Id))";
var populateData = @"declare @digits as table (d int)
insert into @digits values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)
insert into Data (payload)
select
d1.d * 1 +
d2.d * 10 +
d3.d * 100 +
d4.d * 1000 +
d5.d * 10000 +
d6.d * 100000
as value
from @digits d1
cross join @digits d2
cross join @digits d3
cross join @digits d4
cross join @digits d5
cross join @digits d6";
using (var conn = new SqlConnection()) {
conn.ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Integrated Security=true;";
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "create database [" + dbName + "]";
cmd.ExecuteNonQuery();
cmd.CommandText = "use [" + dbName + "]";
cmd.ExecuteNonQuery();
cmd.CommandText = createSql;
cmd.ExecuteNonQuery();
cmd.CommandText = populateData;
cmd.ExecuteNonQuery();
cmd.CommandText = "Select Id, Payload, Version from Data";
byte[] payloadBuffer = new byte[16];
byte[] verBuffer = new byte[8];
int c = 0;
for (int i = 0; i < 1000; i++)
{
using (var reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess))
{
while (reader.Read())
{
c++;
var id = reader.GetInt32(0);
var payload = reader.GetBytes(1, 0, payloadBuffer, 0, 16);
var ver = reader.GetBytes(2, 0, verBuffer, 0, 8);
}
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment