【发布时间】:2016-01-14 12:28:54
【问题描述】:
我有一种方法,我想根据输入的类型以不同的方式使用。这就是我所拥有的:
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),但我有两个问题。
- 如果有人用
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-method。如果我制作 GetSBySource 或其他东西,感觉很奇怪)。
【问题讨论】:
-
究竟是什么问题?开发者错误?为什么要将它放在一个方法中?是否会出现您想要同时传递两个值的情况?
sql-identifier有什么用? -
我认为更多的是关于架构
-
如果
source被认为是一个独特的标识符,那么为什么它是string而不是Guid? -
我个人认为您也应该将该存储过程分开。
-
要查看字符串是否包含有效的 GUID,您可以使用
Guid.TryParse作为返回值。
标签: c# sql-server uniqueidentifier