sql - Access SQL : Nz() Function executed From VBD

标签 sql vb.net ms-access

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() 始终计算 truepartfalsepart,即使 truepart 为 True。

关于sql - Access SQL : Nz() Function executed From VBD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064269/

相关文章:

sql - 每行的正则表达式的匹配计数

sql - 如何更改新 Rails 应用程序的数据库数据

c# - 监控现场麦克风输入

c# - 使用 C# 使用 CSV 文件填充 DataGridView,并使用结果更新 Access 数据库

连接两个表的前缀和非前缀字段的 SQL 查询

php - 从查询填充表单数据的链接

php - 无法通过 PHP 连接到 msSQL 数据库

vb.net - Linq-to-Entities 聚合在外部函数中计算的列

mysql - 得到一个异常,说参数已经定义

database - 从 Access 数据库中删除记录,删除时出错