Я пытаюсь написать приложение, в котором у меня есть таблица, которую я экспортирую в текстовый файл с разделителями табуляции. У меня есть столбец, который имеет тип varbinary (max) в таблице.
Я конвертирую его в varchar, который просто удаляет 0x из строки varbinary и сохраняет его в файле. Я запускаю этот запрос выбора с помощью sqlcmd в командной строке и сохраняю результат в файле.
SELECT AuthorizationId
,Name
,CONVERT(VARCHAR(85), [ownersid], 2) AS ownersid
,[ownerSidWhereDefined]
,[AuthorizationType]
,ISNULL(CONVERT(NVARCHAR(10), [ValidFrom]), '') AS [ValidFrom]
,ISNULL(CONVERT(NVARCHAR(10), [ValidTo]), '') AS [ValidTo]
from Authorization
Пример строки - 72 Администратор 01050000000000051500000026761E2FEB25792C07E53B2B24060000 4 1
После завершения экспорта я пишуприложение C #, которое будет читать этот файл и выполнять sqlbulkcopy для вставки данных в таблицу в другой базе данных. На данный момент файл содержит правильное значение, которое, как я ожидаю, будет из таблицы.
Это код, который я запускаю для того же -
public class AuthorizationsFmt
{
public string AuthorizationId;
public string ownerSid;
public byte[] ownerSidWhereDefined;
public string Name;
public string AuthorizationType;
public string ValidFrom;
public string ValidTo;
}
IEnumerable<AuthorizationsFmt> FileData = from l in
File.ReadLines(file)
let x = l.Split( '\t')
select new AuthorizationsFmt()
{
AuthorizationId = x.ElementAt(0),
Name = x.ElementAt(1),
ownerSid = Encoding.UTF8.GetBytes(x.ElementAt(2)),
ownerSidWhereDefined = x.ElementAt(3),
AuthorizationType = x.ElementAt(4),
ValidFrom = x.ElementAt(5),
ValidTo = x.ElementAt(6)
};
return FileData;
После этого я преобразую Ienumerable в datatable, использую sqlbulkcopy для вставки данных в таблицу. Проблема заключается в том, что при выполнении sqlbulkcopy преобразование между строкой в varbinary является неправильным.
Исходное значение из файла теперь становится '0x3078303130353030303030303030303035313530303030303032363736314532464542323537393243303235373932433032353739324330324530303030303030303030303032323232323232323230Кроме того, это значение одинаково для всех записей в таблице.