C# 识别 SQL 唯一标识符

本文关键字:标识符 唯一 SQL 识别 | 更新日期: 2023-09-27 18:30:26

我有一个方法,我想根据输入的类型以不同的方式使用。这是我所拥有的:

public static DataTable GetS(string source = null, string customer = null)
    {
        if (source != null && customer == null) 
        {
            return GetDataTableFromQuery("db.GetS", new object[] { "@source", source });
        }
        else if (source == null && customer != null)
        {
            return GetDataTableFromQuery("db.GetS", new object[] { "@customer", customer });
        }
        else
        {
            throw new Exception("Bad input. Call GetS with GetS(source) or GetS(null,customer).");
        }
    }

sp 如下所示:

CREATE PROCEDURE [db].[GetS]
    @source as nvarchar(128) = NULL,
    @customer as nvarchar(128) = NULL
AS
BEGIN
IF @customer IS NULL
BEGIN
    SELECT 
        *
    FROM 
        db.S
    WHERE
        [Source] = @source
END
IF @source IS NULL
BEGIN
    SELECT 
        * 
    FROM 
        db.S
    WHERE 
        customer = @customer
END
END

这对GetS(source)GetS(null,customer)都很好用,但我有 2 个问题。

  1. 如果有人打电话给GetS(customer),那就糟糕了
  2. 它看起来不是很漂亮..

有没有办法做这样的事情(伪代码):

public static DataTable GetS(string input)
{
    if(input is sql-uniqueidentifier)
    {
        return GetDataTableFromQuery("db.GetS", new object[] { "@source", input});
    }
    else
    {
        return GetDataTableFromQuery("db.GetS", new object[] { "@customer", input]);
    }
}

还是有更好的方法?(当然,我可以制作 2 个单独的方法,但我想让它只使用一个 Get -方法。如果我做一个GetSBySource什么的,感觉很奇怪)。

C# 识别 SQL 唯一标识符

在你的情况下,为什么不写两个方法,这并不奇怪!!?我认为使用两种方法是最好的方法。

  1. public static DataTable GetSBySource(Guid source)
  2. public static DataTable GetSByCustomer(string customer)

这将使您的 API 方式更加可用和清晰。

如果你知道,一次你需要它通过一个Uniqueidentifier,你也可以让它成为通用的:

public static DataTable GetS<T>(string input)
{
    if(T is Guid)
    {
        return GetDataTableFromQuery("db.GetS", new object[] { "@source", input});
    }
    else
    {
        return GetDataTableFromQuery("db.GetS", new object[] { "@customer", input]);
    }
}

但是你也应该让你的输入泛型,因为传递Guid s作为string s,不是很好......

使用错误的方法定义,在更改代码时会导致很多问题。例如,您需要将 Guid 传递给仅接受字符串的方法,而不是重构或更改代码将非常困难。此外,方法的定义,应该描述它的用法......