更换SQL SERVER数据库连接方式后,从数据库中取值错误
更换SQL SERVER数据库连接方式后,从数据库中取值异常
以前使用的数据库连接方式为:
<%session("My_ConnectionString")="Provider=SQLOLEDB.1;User ID=" & Application("User01") & ";PWD=" & Application("User02") & ";Data Source=" & Application("User03") & ";Initial Catalog=" & Application("User04") & ""%>
现在改为ODBC数据库连接方式为:
<%session("My_ConnectionString")="Driver={SQL SERVER};Server=" & Application("User03") & ";Database=" & Application("User04") & ";UID=" & Application("User01") & ";PWD=" & Application("User02") & ""%>
其它程序没有做任何变动,现在用SQL语句取值时,如果读取了字段类型为TEXT的字段时,部分值从数据库中可以读出来,但是显示不出来,譬如:
<%
Call OpenDB
set rs_1 = OpenRs("SELECT AC_Message,AC_Emp3,AC_CreateTime FROM PO_AC WHERE AC_ID ='2014050002' ")
%>
<%=rs_1("AC_CreateTime")%><%=rs_1("AC_Emp3")%>
这样结果只能显示 rs_1("AC_CreateTime") 的值,显示不出来rs_1("AC_Emp3") 的值(AC_Emp3的值数据库中不为空)
其中 AC_CreateTime的字段类型为 datetime() ,AC_Message的字段类型为 text ,AC_Emp3的字段类型为 varchar(20)
------解决方案--------------------
原因
SQL Server 的 "Text" 和 "ntext" 数据类型是数据库里的 BLOB(2进制大对象)一个 BLOB 是一个大文件. 典型的 BlOB 是一张图片或一个声音文件,由于它们的尺寸,必须用特殊的方式处理 (例如: 上传, 下载 或者存放到一个数据库)
解决方法
当使用 UltraDev 的 ASP server (ADO) 对 Microsoft SQL Server 的 BLOB 域做动作时,
你的 SQL statements 的 "SELECT" 子句必须在读所有非 BLOB 列后再 读 BLOB 类型列的值.
为了安全, 你还应当维持在数据库里列的从左到右的次序. 如果你选择在你的数据集的最后两列放两个 BLOB 列, 必须先读前一个再读后一个.不要颠倒次序.
也就是说,我们不是要注意在数据库表中"Text" 或"ntext" 类型的字段排在最后,而是要注意"SELECT" 子句中"Text" 或"ntext" 类型的字段排在最后。如果有一列以上的"Text" 或"ntext" 类型的字段,要注意它们在数据库表中的顺序。
以前使用的数据库连接方式为:
<%session("My_ConnectionString")="Provider=SQLOLEDB.1;User ID=" & Application("User01") & ";PWD=" & Application("User02") & ";Data Source=" & Application("User03") & ";Initial Catalog=" & Application("User04") & ""%>
现在改为ODBC数据库连接方式为:
<%session("My_ConnectionString")="Driver={SQL SERVER};Server=" & Application("User03") & ";Database=" & Application("User04") & ";UID=" & Application("User01") & ";PWD=" & Application("User02") & ""%>
其它程序没有做任何变动,现在用SQL语句取值时,如果读取了字段类型为TEXT的字段时,部分值从数据库中可以读出来,但是显示不出来,譬如:
<%
Call OpenDB
set rs_1 = OpenRs("SELECT AC_Message,AC_Emp3,AC_CreateTime FROM PO_AC WHERE AC_ID ='2014050002' ")
%>
<%=rs_1("AC_CreateTime")%><%=rs_1("AC_Emp3")%>
这样结果只能显示 rs_1("AC_CreateTime") 的值,显示不出来rs_1("AC_Emp3") 的值(AC_Emp3的值数据库中不为空)
其中 AC_CreateTime的字段类型为 datetime() ,AC_Message的字段类型为 text ,AC_Emp3的字段类型为 varchar(20)
------解决方案--------------------
原因
SQL Server 的 "Text" 和 "ntext" 数据类型是数据库里的 BLOB(2进制大对象)一个 BLOB 是一个大文件. 典型的 BlOB 是一张图片或一个声音文件,由于它们的尺寸,必须用特殊的方式处理 (例如: 上传, 下载 或者存放到一个数据库)
解决方法
当使用 UltraDev 的 ASP server (ADO) 对 Microsoft SQL Server 的 BLOB 域做动作时,
你的 SQL statements 的 "SELECT" 子句必须在读所有非 BLOB 列后再 读 BLOB 类型列的值.
为了安全, 你还应当维持在数据库里列的从左到右的次序. 如果你选择在你的数据集的最后两列放两个 BLOB 列, 必须先读前一个再读后一个.不要颠倒次序.
也就是说,我们不是要注意在数据库表中"Text" 或"ntext" 类型的字段排在最后,而是要注意"SELECT" 子句中"Text" 或"ntext" 类型的字段排在最后。如果有一列以上的"Text" 或"ntext" 类型的字段,要注意它们在数据库表中的顺序。