我有一種方法,我想根據輸入類型使用不同的方法。這是我有:c#識別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]);
}
}
還是有更好的辦法嗎? (當然,我可以製作兩種不同的方法,但我想只用一個Get
-方法來工作。如果我製作了GetSBySource
或其他東西,感覺很奇怪)。
什麼是確切的問題?開發者錯誤?你爲什麼想把這個放在一個單一的方法中?會不會有一個你想要通過這兩個值的情況? sql-identifier有什麼用? –
我認爲這更多關於架構 – BendEg
如果'source'被認爲是一個不可識別的標識符,那爲什麼它是一個'string'而不是'Guid'? – juharr