簡體   English   中英

C#識別SQL的uniqueidentifier

[英]c# recognize sql uniqueidentifier

我有一種方法要根據輸入的類型使用不同的方法。 這就是我所擁有的:

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東西,感覺很奇怪)。

在您的情況下,為什么不寫兩個方法,這並不奇怪! 我用兩種方法是最好的方法。

  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傳遞給只接受字符串的方法,否則重構或更改代碼將非常困難。 此外,方法的定義應描述其​​用法...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM