Possible Duplicate:
Convert Null to zero in access database
我正在使用 Microsoft Visual Web Developer 2010 Express 创建 ASP/VB.NET 页面以与 Microsoft Office Access 07 连接。这是我的问题:
我有一个带有三个下拉列表的页面,用于过滤数据表,我有这个 Access SQL 查询,它在 Access 中工作得很好,但是当我尝试从 VB.net 执行 sql 时,出现错误总是出现。 “表达式中未定义函数‘Nz’。”
我已经意识到可能存在错误,但我仍然找不到解决方案。
VB.NET 代码:
Shared Function SelectFilterWomen(ByVal tTypeCode As Integer, ByVal bBrandCode As Integer, ByVal sSize As Integer) As DataTable
Dim Command As New OleDbCommand()
Command.CommandText = "QUERY;"
Command.Connection = DB.Conn()
Command.Parameters.AddWithValue("@tTypeCode", tTypeCode)
Command.Parameters.AddWithValue("@bBrandCode", bBrandCode)
Command.Parameters.AddWithValue("@sSize", sSize)
Dim Table As New DataTable("FilterWomen Shoes")
Table.Load(Command.ExecuteReader())
Return Table
查询:
SELECT S.sShoes_ID , S.sPicture, S.sSize , S.sPrice
FROM ((Shoes S INNER JOIN Type T ON S.tTypeCode = T.tTypeCode)
INNER JOIN Brand B ON S.bBrandCode = B.bBrandCode)
WHERE S.tTypeCode = Nz(@tTypeCode, T.tTypeCode)
AND S.bBrandCode = Nz(@bBrandCode, B.bBrandCode)
AND S.sSize = Nz(@sSize, S.sSize)
AND S.sSex = 'Female' AND S.sActive = 'Y';
谢谢
最佳答案
当且仅当表达式服务可用时,Access 查询才可以使用 VBA 函数(和用户定义的函数)。并且表达式服务只能在 Access 应用程序实例中使用。
当您使用 OleDb 从 Dot.Net 连接到 Access 数据库文件时,您没有连接到 Access 应用程序实例(仅连接到其数据库引擎),因此表达式服务不可用。因此,您不能在查询中使用 VBA 或用户定义的函数。您只能使用数据库引擎实现的那些功能。
因此,无论您尝试什么,任何包含 VBA Nz()
函数的查询都将触发“表达式中未定义函数'Nz'”错误。如果没有表达式服务的帮助,Access 的数据库引擎不知道 Nz()
是什么。
寻找Nz()
的替代方案。在许多情况下,IIf Function可以是一个很好的替代品。
语法
IIf(expr, truepart, falsepart)
在查询中,您可以执行以下操作:
SELECT IIf([SomeField] Is Null, "unavailable", [SomeField])
FROM YourTable;
如果您了解 VBA IIf()
函数,这听起来可能有些矛盾。但是,数据库引擎包含其自己的 IIf()
实现,其操作方式与 VBA IIf()
不同。当 truepart 为 True 时,数据库引擎的 IIf()
“短路”,因此在这种情况下不会评估 falsepart; VBA IIf()
始终计算 truepart 和 falsepart,即使 truepart 为 True。
关于sql - Access SQL : Nz() Function executed From VBD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064269/