[英]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.