C# 需要以C字符串数据类型“原样”获取Oracle原始数据
帮我一个忙,要求是我需要在C中使用与字符串相同的Oracle RAW值。我可以将字符串保存为oracle表中的原始值,但在获取字符串时,它会 异常对象必须实现IConvertible 我可以理解,由于原始数据类型未映射到任何主数据类型,所以编译器会给出此异常,但我如何实现这一点 我使用EF6代码优先的方法,在后端我使用Oracle 12C 下面是示例代码C# 需要以C字符串数据类型“原样”获取Oracle原始数据,c#,oracle,entity-framework-6,C#,Oracle,Entity Framework 6,帮我一个忙,要求是我需要在C中使用与字符串相同的Oracle RAW值。我可以将字符串保存为oracle表中的原始值,但在获取字符串时,它会 异常对象必须实现IConvertible 我可以理解,由于原始数据类型未映射到任何主数据类型,所以编译器会给出此异常,但我如何实现这一点 我使用EF6代码优先的方法,在后端我使用Oracle 12C 下面是示例代码 public partial class EF6TEST { [Key] [Column(Order = 0)] //
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和LONG RAW数据类型用于Oracle数据库在不同系统之间移动数据时不进行解释或转换的数据。这些数据类型用于二进制数据或字节字符串
换句话说,字节[]的映射比字符串更好。转换为字符串需要应用编码
我建议您尝试将列映射到byte[],然后在.NET中使用适当的编码将其转换为字符串。e、 g.Encoding.UTF8.GetStringbytes.编译器不提供异常-异常发生在执行时,而不是编译时。请澄清何时出现错误。很抱歉误解这是运行时错误。我也尝试将Id转换为byte[],并在context.EF6TEST select t.Id.ToList中使用var be1=from t t;var be2=System.Text.Encoding.ASCII.GetStringbe1.FirstOrDefaul;但这会产生不同的字符串集,使用默认编码、ASCII、Unicode,但每次都会产生一组衍射字符。@VSharma:那么数据是什么?它是从哪里来的?它实际上是文本数据吗?如果您先看到代码,我会在ID字段中添加一个字符串96A8B17FB464B886146A28399E7E2,该字符串保存在oracle原始数据类型列字段中。接下来我试着去拿同样的value@VSharma:但是您看到返回的字节是什么?基本上,您也不应该将其保存为字符串-我建议在直接与RAW交互的任何地方都使用byte[]。非常满意,所以将其作为答案。