由于 ODBC 驱动程序造成的许多不便,无论数据库管理系统(在我的情况下为 SQL Server 2000)如何,我都想将我的应用程序连接类型从 ODBC 更改为本地。
SQLWindows 提供了这个特性,但是有很大的差距。使用 ODBC 驱动程序,当表单中的某个字段为空时,它会发送 NULL 以记录在数据库中。感谢sql.ini文件中的配置参数setzerolengthstringstonull=on 。但是,使用本机连接时,它会发送一个空白字符串' ',当然,这会导致各种不一致和错误,具体取决于列相关的表或外键。我不知道如何在UDL 文件中重现参数setzerolengthstringstonull或在内部更改它。
有没有办法在应用程序中正确配置它,甚至在运行之前拦截 SQL 命令(以通用方式,而不是在每个 SQL 之前),以便我可以手动将空白值更改为 NULL?
我知道 SQLWindows 文档建议我不要直接在 SQL 中发送字段,而是创建额外的变量,检查这些字段是否为空白,将变量设置为字段中的值或STRING_Null,然后在 SQL 中发送变量。由于我的申请规模庞大,这在我的情况下是不可能的。这将需要简单地重写几乎所有内容。
我写了两个最小的例子来说明它们之间的不同之处:
这在 OBDC 中有效,它在表tblUser中插入一个用户,假设 UsrEmail 列在tblEmail中查找电子邮件。dfUsr [something]是MyForm中的控件。
INSERT INTO tblUser (
UsrName,
UsrEmail
)
SELECT
:MyForm.dfUsrName,
:MyForm.dfUsrEmail
为了在本机连接中做同样的事情,我必须创建一个名为sUsrEmail(或其他)的字符串变量,并在下面的特定 SQL 之前执行以下代码
if SalIsNull(MyForm.dfUsrEmail)
sUsrEmail = STRING_Null
else
sUsrEmail = MyForm.dfUsrEmail
甚至查询也不一样:
INSERT INTO tblUser (
UsrName,
UsrEmail
)
SELECT
:MyForm.dfUsrName,
:sUsrEmail