我正在使用Visual Studio中的TableAdapter查询配置向导编写以下SQL查询。使用ISNULL的SQL查询
SELECT COUNT(*) AS census
FROM Inventory INNER JOIN Taxonomy ON Inventory.GlobalID = Taxonomy.GlobalID
WHERE (Inventory.Institution = @institution) AND (Inventory.Year = @year) AND
(Inventory.Nending > 0)
我试图以下标准添加到WHERE子句:
(Taxonomy.Class = ISNULL(@class, Taxonomy.Class))
,使得任一
1)仅行匹配@class输入参数被退回或
2 )无论其TaxonomyGlobal.Class值如何,都将返回所有行。
当我将此语句添加到查询中时,调用查询的C#代码抛出System.ArgumentNullException错误,并声明@class值不能为空。
任何有关如何将此标准添加到WHERE子句的帮助将不胜感激。
C#代码:
namespace CollectionMetrics
{
class DatabaseQueries
{
QueryDataSetTableAdapters.InventoryTableAdapter queryAdapter =
new QueryDataSetTableAdapters.InventoryTableAdapter();
public void CensusQuery(string institution, short year, string xclass)
{
int census = 0;
string localClass = xclass;
if (xclass == "All Classes") localClass = null;
census = (int)queryAdapter.CensusBySpecies(localClass, institution, year);
censusOutput.Add(census);
}
}
}
ISNULL不会告诉你expressin是否为null,而只是用指定值替换空值。 –
@DavidP,我认为他明白了。再次仔细查看ISNULL在这里的使用情况。 –
请提供与此问题相关的完整C#代码,这将有助于我们更好地理解您 – Surendra