如何从字符串数据中检索varbinary



我正在尝试编写一个应用程序,其中我有一个表,可以导出到以制表符分隔的文本文件中。我在表中有一个varbinary(max(类型的列。

我将其转换为varchar,它只是从varbinary字符串中删除0x并将其存储在文件中。我在命令行中使用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管理员0105000000000051500000026761E2FEB25792C07E53B2B224060000 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转换为数据表,使用sqlbulkcopy将数据插入表中。这里的问题是,在执行sqlbulkcopy时,字符串到varbinary之间的转换不正确。

当我在数据库中看到时,文件中的原始值现在变为"0x30783031303530303030303030303531353030303030303236373631453246454232353739324330374535334232423234303630303030"。此外,该值对于表中的所有记录都是相同的。

这是我用来转换为byteArray,然后插入数据库的内容

public static byte[] ByteArrayFromHexaString(string hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}

相关内容

  • 没有找到相关文章

最新更新