【发布时间】:2018-10-24 09:17:59
【问题描述】:
我有一个 Windows 2016 服务器操作系统和一个 MSSQL 2017 数据库。
我的表如下:
CREATE TABLE [dbo].[temp_table](
[varchar_250] [varchar](250) NULL,
[varchar_4000] [varchar](4000) NULL,
[varchar_max] [varchar](max) NULL,
[nvarchar_250] [nvarchar](250) NULL,
[nvarchar_4000] [nvarchar](4000) NULL,
[nvarchar_max] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
这个表只有一行, 并且所有单元格的值都是 'őőŐŐűűŰŰööÖÖÖüüÜÜóóÓÓúúÚÚééÉÉááÁÁ' 字符串。
我在Delphi中写了一个exe程序,一个简单的dll程序和一个isapi dll程序。 所有程序都包含一个程序。此过程包含从 temp_table 读取的查询。之后,程序将值写入 txt 文件。
我的exe程序调用程序:
- 直接
- 来自简单的 dll
- 从 isapi dll 作为外部过程
1-3中的结果总是如下:
列类型 varchar_250,值:őőŐŐűűŰŰööÖÖüüÜÜÜóóÓÓúúÚÚééÉÉááÁÁ
列类型 varchar_4000,值:őőŐŐűűŰŰööÖÖüüÜÜÜóÓÓúúÚÚééÉÉááÁÁ
列类型 varchar_max,值:őőŐŐűűŰŰööÖÖüüÜÜÜóÓÓúúÚÚééÉÉááÁÁ
列类型 nvarchar_250,值:őőŐŐűűŰŰööÖÖüüÜÜÜóóÓÓúúÚÚééÉÉááÁÁ
列类型 nvarchar_4000,值:őőŐŐűűŰŰööÖÖüüÜÜÜóÓÓúúÚÚééÉÉááÁÁ
列类型 nvarchar_max,值:őőŐŐűűŰŰööÖÖüüÜÜÜóÓÓúúÚÚééÉÉááÁÁ
但是,当我将 isapi dll 加载到浏览器中时,程序会生成文本文件,但数据不正确:
列类型 varchar_250,值:őőŐŐűűŰŰööÖÖüüÜÜÜóóÓÓúúÚÚééÉÉááÁÁ
列类型 varchar_4000,值:őőŐŐűűŰŰööÖÖüüÜÜÜóÓÓúúÚÚééÉÉááÁÁ
列类型varchar_max,值:ooOOuuUUööÖÖüüÜÜóóÓÓúúÚÚééÉÉááÁÁ
列类型 nvarchar_250,值:ooOOuuUUööÖÖüüÜÜóÓÓúúÚÚééÉÉááÁÁ
列类型 nvarchar_4000,值:ooOOuuUUööÖÖüüÜÜóÓÓÓúÚÚééÉÉááÁÁ
列类型 nvarchar_max,值:ooOOuuUUööÖÖüüÜÜóóÓÓúúÚÚééÉÉááÁÁ
在 1-3 种情况下,该过程由我的用户调用,在最后一种情况下,该过程由 IIS 调用。
最后一个案例有什么问题?
提前感谢您的帮助
【问题讨论】:
-
您只显示2个案例,所有值都相同。
-
不,第二次运行似乎松开了最后 4 种 varchar 类型的双前向变音符号。回答这个问题所缺少的更多是关于上下文:如何从 Delphi 调用过程,并在数据模块上存储过程对象?至少一些代码会很有帮助。
标签: sql-server delphi iis isapi