在.NET中格式化字符串的正确位置在哪里?

在.NET中格式化字符串的正确位置在哪里?,.net,vb.net,.net,Vb.net,我们的数据库中有一个名为employee number的字段。它是char(10)字段。我们正在正确地存储这些数字。因此,我们将数字存储为“1”,“2”等。我不确定我们为什么开始这样做,因为这发生在我开始在这里工作之前 因此,业务逻辑中以员工编号作为参数之一的每个函数都需要对编号进行右对齐。如果我们忘记了这一点,它将无法正确更新数据库 我的问题是: 有没有更好的方法可以做到这一点,这样我们就不必在每个函数中设置数字格式?停止将员工ID存储在数据库中,右对齐,并在想要显示时将其拉出后进行任何对齐

我们的数据库中有一个名为employee number的字段。它是char(10)字段。我们正在正确地存储这些数字。因此,我们将数字存储为
“1”
“2”
等。我不确定我们为什么开始这样做,因为这发生在我开始在这里工作之前

因此,业务逻辑中以员工编号作为参数之一的每个函数都需要对编号进行右对齐。如果我们忘记了这一点,它将无法正确更新数据库

我的问题是:


有没有更好的方法可以做到这一点,这样我们就不必在每个函数中设置数字格式?

停止将员工ID存储在数据库中,右对齐,并在想要显示时将其拉出后进行任何对齐

编辑:员工编号至少应存储为varchar(10)(假设它可以接受非数字字符)或整数(如果它是假设的实际“数字”)。在检索该数字时,如果需要,您可以在任何应用程序中显示该数字


注意:我在评论中提到了这一点,但需要明确指出的是:试图解决潜在问题只会导致更多的问题,并在从事该项目并将在未来继承该项目的不同开发人员之间产生一种总体上的混乱感。

这取决于系统架构的过程。您是否有供企业使用的数据层?也许你可以在那里格式化


我想把DB改成int或Bigint是一个很大的改变,如果不是,那么,

< P>尽管它是一个坏的实践,正如其他人所张贴的那样,你不能从他们的Excel类中公开一个只读属性来处理格式化< /p> < p>你可能想考虑一个扩展方法(扩展为假设)。员工id的整数类型

public static int ToRightAlignedString(this int obj)
{
    return ("          " + obj.ToString()).Right(10);
}

我同意其他人的观点,重构是第一个建议。将员工id存储为原始数据,并在视图级别执行任何需要正确对齐的格式设置

若这绝对不是一个选项,我会在字符串上写一个扩展方法来处理这个问题。然后可以存储一些字符串。RightJustify(10)。扩展方法必须是静态类中的静态方法。类似于以下内容的操作将起作用:

public static class ExtensionMethods
{
    public static string RightJustify(this string s, int chars)
    {
        if (s.Length > chars)
            return s.Substring(0, chars);
        else
            return s.PadLeft(chars, ' ');
    }
}

我不同意使用char数据类型,但要解决这个问题,一种方法是使用触发器。使用整数形式的数字更新表,然后使用触发器格式化该表并将其存储在正确的表中

同样,我只想重构数据类型,但听起来您没有能力这样做。

您可以定义一个封装了整数的类型(最有可能是结构),并在代码中为员工编号使用该类型。像这样的东西(C#)

注意:我同意修复数据库是正确的™ 去做。然而,我也知道,这一选择并不总是可行的。在代码中使用自定义数据类型而不是int将是消除来回转换为数据库字符串的问题的一种简便方法

Public Function foo(ByVal valToStore As Object) As String
    Dim RetVal As String = String.Empty
    If TypeOf valToStore Is String Then
        RetVal = DirectCast(valToStore, String)
    ElseIf TypeOf valToStore Is Integer Then
        RetVal = DirectCast(valToStore, Integer).ToString
    End If
    RetVal = RetVal.Trim.PadLeft(10, " "c)
    Return RetVal
End Function

我同意数据库应该将其存储为数字,而不是字符串。我猜你想要一个VB答案。

+1-很抱歉你被否决了,但这是正确的答案。特别是如果他的id是数字+1,数据库是荒谬的,它必须被修复。不要过关,不要收取200美元。试图绕过一个巨大的WTF本身就是一个WTF。有时,不幸的是,你无法修复数据库-特别是在长期运行的遗留应用程序上,或者在以这种方式设置的遗留系统上。我们每天都与巨大的WTF合作。有时改变它不是一种选择。互联网协议提供了大量的例子。扩展方法的缺点是每个人都必须记住调用它,否则更新就会失败。这是OP试图避免的一个问题。这就是为什么他应该采取行动,重构数据库,并将数字id存储为一个普通的数字字段。
Public Function foo(ByVal valToStore As Object) As String
    Dim RetVal As String = String.Empty
    If TypeOf valToStore Is String Then
        RetVal = DirectCast(valToStore, String)
    ElseIf TypeOf valToStore Is Integer Then
        RetVal = DirectCast(valToStore, Integer).ToString
    End If
    RetVal = RetVal.Trim.PadLeft(10, " "c)
    Return RetVal
End Function