如何从字符串数据中检索 varbinary?
How to retrieve varbinary from a string data?
我正在尝试编写一个应用程序,其中我有一个 table 导出到制表符分隔的文本文件。我在 table 中有一个类型为 varbinary(max) 的列。
我将它转换为 varchar,它只是从 varbinary 字符串中删除 0x 并将其存储在文件中。我 运行 这个 select 在命令行上使用 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 以将数据插入另一个数据库中的 table。此时,该文件包含我期望它来自 table 的正确值。
这是我的代码运行一样-
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 转换为数据 table,使用 sqlbulkcopy 将数据插入 table。这里的问题是在执行 sqlbulkcopy 时字符串到 varbinary 之间的转换不正确。
文件中的原始值现在变为'0x3078303130353030303030303030303030353135303030303030323637363145324645423235373932433037453533423242323430303630'当我在数据库中查看时此外,此值对于 table.
中的所有记录都是相同的
这是我以前转成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;
}
我正在尝试编写一个应用程序,其中我有一个 table 导出到制表符分隔的文本文件。我在 table 中有一个类型为 varbinary(max) 的列。
我将它转换为 varchar,它只是从 varbinary 字符串中删除 0x 并将其存储在文件中。我 运行 这个 select 在命令行上使用 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 以将数据插入另一个数据库中的 table。此时,该文件包含我期望它来自 table 的正确值。
这是我的代码运行一样-
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 转换为数据 table,使用 sqlbulkcopy 将数据插入 table。这里的问题是在执行 sqlbulkcopy 时字符串到 varbinary 之间的转换不正确。
文件中的原始值现在变为'0x3078303130353030303030303030303030353135303030303030323637363145324645423235373932433037453533423242323430303630'当我在数据库中查看时此外,此值对于 table.
中的所有记录都是相同的这是我以前转成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;
}