【问题标题】:NVarChar to C# Data TypesNVarChar 到 C# 数据类型
【发布时间】:2014-08-29 23:37:18
【问题描述】:

数据库存储 nvarchar,我检索信息,我想将其塞入 C# 数据类型,无需任何声明性转换代码。

您能否将 nvarchar 隐式转换为 C# 数据类型? (例如 nvarchar 到 int)

【问题讨论】:

  • 您可以使用int.TryParse() 之类的方式将字符数据解析为数字类型。请注意,没有 implicit 保证任何给定的字符串都可以解释为数字,因此您的代码应该处理解析失败的情况。
  • @David 查看我上面的编辑。
  • 语言中没有机制可以假装字符串是整数,不。这种机制本质上容易出错,因为并非所有字符串都可以解释为整数。您可以编写这样的机制,它会在尝试转换数据之前在内部对数据执行安全检查。尽管您最好的选择可能是将数字数据存储为数字数据。
  • 这是我正在研究的潜在 EAV 系统的一部分,目前除了 nvarchar 之外无法存储任何内容

标签: c# sql asp.net


【解决方案1】:

Nvarchar 是一个字符串,如果您想将其转换为 int,则必须进行某种转换,因为我可以在列中包含“Potato”,int 会映射到什么?

Here is a listing 的所有 SQL 类型以及它们映射到的 C# 类型。因此,如果您想要 C# 中的 int 而不进行转换,您唯一的选择是 Sql 中的 int

【讨论】:

    【解决方案2】:

    除了将其视为字符串之外,您无法隐含地使用它。

    如果你希望它是一个 int,你可以使用一些逻辑来 Parse 或更好的 TryParse 它。

    看看下面的

    string nvarchar1 = "12";
    string nvarchar2 = "1.2";
    string nvarchar3 = "hello"; 
    
    var one = int.Parse(nvarchar1); // good 
    var two = int.Parse(nvarchar2); // exception
    var three = int.Parse(nvarchar3); // exception  
    
    var bone = int.TryParse(nvarchar1,out one); // true
    var btwo = int.TryParse(nvarchar2,out one).Dump(); // False, 0
    var bthree = int.TryParse(nvarchar3,out one); // False, 0
    

    这完全取决于您是否信任数据库中的输入以及信任程度。

    【讨论】:

    • 很好的答案。带有 bool 返回值的 TryParse() 是一个很棒的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2022-12-14
    • 2019-07-03
    相关资源
    最近更新 更多