簡體   English   中英

需要以 C# 字符串數據類型“按原樣”獲取 Oracle RAW

[英]Need to fetch Oracle RAW in C# string datatype "as is"

幫助我,要求是我需要 Oracle RAW 的相同值作為字符串在 C# 中。 我能夠將 String 保存為 oracle 表中的 RAW 值,但是在獲取它時出現異常“對象必須實現 IConvertible”

我可以理解,由於 RAW 數據類型未映射到任何主要數據類型,因此編譯器給出了此異常,但我該如何實現呢?

我使用 EF6 代碼優先方法,在后端我使用 Oracle 12C,

下面是示例代碼,

 public partial class EF6TEST
{
    [Key]
    [Column(Order = 0)]
   // [MaxLength(32)]
    public string ID { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(50)]
    public string NAME { get; set; }
}
 public class BE
{
    public string id;
    public string name;
}


class Program
{
    static void Main(string[] args)
    {
        List<BE> be;
        try
        {
            using (var context = new Model1())
            {
                #region insert
                context.EF6TEST.Add(new EF6TEST()
                {
                    ID = "96A8B17B17FB464B886146A28399E7E2",
                    NAME = "NewRAM"
                });
                #endregion
                context.SaveChanges();

                #region fetch
                be = (from t in context.EF6TEST
                      select new BE
                      {
                          id = t.ID,
                          name = t.NAME
                      }).ToList<BE>();


                #endregion                                       

            }
            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception found");
        }
    }

RAW數據類型記錄為:

RAW和LONG RAW數據類型用於Oracle數據庫不解釋的數據(在不同系統之間移動數據時不轉換)。 這些數據類型用於二進制數據或字節字符串。

換句話說,與string相比, byte[]映射更好。 轉換為字符串需要應用編碼。

建議您嘗試將列映射到byte[] ,然后在.NET中使用適當的編碼將其轉換為字符串。 (例如Encoding.UTF8.GetString(bytes) 。)

在 class C#

public class MyClass
{
    public byte[] Id { get; set; }
    public string Name { get; set; }
}

查詢中select

SELECT 
  id      AS Id,  
  name    AS Name
  FROM my_table
WHERE id = :V_ID

select 的返回將Id轉換為這種格式

 var dto = new MyClassDto {
     Id = new Guid(myClass.Id),
     Name = myClass.Name
 }

我用 Dapper 做了這個。 Raw 值返回為具有 16 個值的 byte[] 數組。 數組中的每個值都是 guid 每個字節的十進制值。 這是轉換為字符串的代碼:

public class MyObject
{        
    public byte[] Guid { get; set; }
}

myObject.Guid.Select(x => x.ToString("X")))

暫無
暫無

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

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