【问题标题】:Storing an int to SQL, but keep leading zeros将 int 存储到 SQL,但保持前导零
【发布时间】:2014-06-12 02:41:29
【问题描述】:

我的 SQL Server 2012 表中有一个字段定义为 Int。但是当我尝试使用转换 (Convert.toint32(textbox.text)) 从 C# 中的文本框中获取值时。假设文本框包含数字 0032,它将作为 32 删除 00 保存到数据库中。

除了更改字段数据类型之外的任何解决方案??

【问题讨论】:

  • 0032 只是32 的字符串表示形式。您应该将值保存在 db 中(在这种情况下为32),并在打印时根据需要使用一些格式化逻辑。
  • 在这种情况下,它会比直接从 db 调用它需要太多的操作。它是一个发票编号字段,它应该以零开头。
  • @OJazem 使应用程序格式化显示的发票 ID。创建一个辅助函数。
  • @dean,不,长度不固定。
  • @dean 但是如果长度是固定的呢?那么这个问题有解决方案吗?

标签: c# sql-server type-conversion sqldatatypes


【解决方案1】:

数字数据类型不保留前导零,因为它们对您要存储的数字无关紧要。 Char 或 Varchar 更合适。您可以设置约束以确保仅存储数字字符。

如果您绝对无法更改数据类型,那么另一种选择是将前导零的数量存储到另一个 int 字段中

因此,在您的示例中,您将存储:
价值 : 32
前导零:2

【讨论】:

    【解决方案2】:

    所以以数字格式保存到数据库 - 忽略前导零(正如其他人提到的那样),然后像这个例子一样格式化:

    int i  = 32;
    string format = "0000";
    Console.WriteLine(i.ToString(format));
    

    【讨论】:

      【解决方案3】:

      数据类型由一组可能的值和可以对其进行的操作来定义。

      所以,这里的问题是:您将对这些值执行哪些操作?求和、加法、乘法……?

      如果答案为“否”,则将列的类型更改为 varchar()char() 并按原样存储值,并使用前导零。

      如果是“是”,则存储一个正确的数字并将格式留给客户端。

      无论如何,请始终尝试在数据库中使用适当的数据类型,域完整性是一件好事。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 2014-09-09
        • 1970-01-01
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多