[英]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個問題。
GetS(customer)
打電話會很糟糕 有什么辦法可以做這樣的事情(偽代碼):
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
東西,感覺很奇怪)。
在您的情況下,為什么不寫兩個方法,這並不奇怪! ? 我用兩種方法是最好的方法。
public static DataTable GetSBySource(Guid source)
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.