【问题标题】:SQL Server - Using tinyint with enumSQL Server - 将 tinyint 与枚举一起使用
【发布时间】:2014-04-04 16:26:57
【问题描述】:

假设我有一个 SQL Server 数据库,除了其他表之外,还有一个名为 Mail 的表,该表具有与之关联的预期收件人、发件人、邮件正文等,其中之一是属性 @987654322 @,它基本上表示邮件的发送优先级是高、正常还是低。由于我将只使用这些少量的值(如果要添加更多,它不会那么多),我决定将 Priority 设为 tinyint 类型,而在我的代码中我代表的是enum 类型。

我的问题是,调用数据库时插入和检索此属性的正确方法是什么?在检索的情况下(使用DataRow)我有:

mail.Priority = (MailPriority)(byte)row["Priority"];

对于插入:

parameter = new SqlParameter("@Priority", SqlDbType.TinyInt);
parameter.Value = (byte)mail.Priority;
statement.Parameters.Add(parameter);

(Where 语句是SQLCommand)。

那么这会起作用吗?这是正确的方法吗?我认为使用tinyint 可以,因为可能的值不会那么多,但我不知道int 是否会更好,在性能方面更好,或更常用等。

【问题讨论】:

    标签: c# .net sql-server


    【解决方案1】:

    性能和空间不一样。
    从性能的角度来看,.NET 实际上可以更快地访问 Int32。
    您得到的是 SQL 中的空间节省。
    而且您还应该将枚举定义为字节。

    public enum enumSVMV : byte { SV = 0, MV = 1, none = 2 };
    

    【讨论】:

    • 将枚举定义为字节有区别吗?
    • 为什么不希望枚举与 SQL 保持一致?
    • 很公平。但是,在检索和插入的情况下,我是否必须更改我的代码?我认为这是正确的,因为你没有提到它。
    • 找出方法是测试。您不必将枚举更改为字节。
    • 虚拟测试似乎工作正常。而且由于您告诉我将枚举类型定义为 SQL 中的字节和空间节省(我不知道),所以我将其标记为答案。所以谢谢你。
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2017-12-08
    相关资源
    最近更新 更多