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 个问题。
- 如果有人打电话给
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 传递给仅接受字符串的方法,而不是重构或更改代码将非常困难。此外,方法的定义,应该描述它的用法......