簡體   English   中英

如何從字符串數據中檢索 varbinary?

[英]How to retrieve varbinary from a string data?

我正在嘗試編寫一個應用程序,其中我有一個導出到制表符分隔的文本文件的表。 我在表中有一個類型為 varbinary(max) 的列。

我將它轉換為 varchar,它只是從 varbinary 字符串中刪除 0x 並將其存儲在文件中。 我在命令行上使用 sqlcmd 運行這個 select 查詢並將結果存儲在一個文件中。

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 轉換為數據表,使用 sqlbulkcopy 將數據插入到表中。 這里的問題是在執行 sqlbulkcopy 時字符串到 varbinary 之間的轉換不正確。

文件中的原始值現在變為 '0x3078303130353030303030303030303030353135303030303030323637363145324645423235373932433037453533423242323430363030303 時在數據庫中。 此外,該值對於表中的所有記錄都是相同的。

這是我用來轉換為 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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM