Sql server 在经典ASP.NET中运行UTF-8编码的sql文件时出现问题

Sql server 在经典ASP.NET中运行UTF-8编码的sql文件时出现问题,sql-server,encoding,utf-8,vbscript,asp-classic,Sql Server,Encoding,Utf 8,Vbscript,Asp Classic,我有一堆sql文件,这些文件中包含的查询不需要每次在本地数据库中发生某些更改时都运行。 我们使用经典ASP代码在VBScript上编写的循环中运行这些文件,如下所示: Dim arrSqlLines() i=0 set t=fso.OpenTextFile(filePath,1,false) 直到t.AtEndOfStream Redim保留arrSqlLines(i) arrSqlLines(i)=t.ReadLine i=i+1 环 t、 接近 对于arrSqlLines中的每个sqlLin

我有一堆sql文件,这些文件中包含的查询不需要每次在本地数据库中发生某些更改时都运行。 我们使用经典ASP代码在VBScript上编写的循环中运行这些文件,如下所示:

Dim arrSqlLines()
i=0
set t=fso.OpenTextFile(filePath,1,false)
直到t.AtEndOfStream
Redim保留arrSqlLines(i)
arrSqlLines(i)=t.ReadLine
i=i+1
环
t、 接近
对于arrSqlLines中的每个sqlLine
sqlLine=Trim(sqlLine)
sqlBatch=Trim(sqlBatch&sqlLine)&vbCrLf
调用dbexecConnection(sqlBatch、objDbConnection)
下一个
函数dbexeconnection(sql,objConnExec)
dim CMDTTEMP
出错时继续下一步
设置cmdTemp=Server.CreateObject(“ADODB.Command”)
设置cmdTemp.ActiveConnection=objconnectexec
cmdTemp.CommandText=sql
cmdTemp.Execute
如果错误号为0,则
如果会话(“Skiperor”)-1,则
response.write“执行数据库时出错:&sql&”
response.write“Error=(&err.description&”)命令 答复.完 如果结束 如果结束 错误转到0 端函数
问题在于,如果sql文件编码为
UTF-8而没有BOM
,则运行正常,但如果任何文件编码为
UTF-8
格式,则会产生错误:

例如,此sql文件的开头如下所示:

设置带引号的\u标识符
去
如果对象\u ID('RPM\u GET\u实际\u成本\u FOR \u EPIC')不为空
下降功能[RPM\U获取\U实际成本\U史诗]
去
创建函数[RPM\U获取\U实际成本\U史诗]
(
@EpicID为int,
@RateType为Int,--1表示混合,2表示成本中心
@CalcType为Int--1表示按小时,或2表示按点
)
返回浮动
开始
宣布成本浮动
声明@CostX float
声明@ItStorys表(
故事情节,
State int,
DemoStatus int,
Dfficulty int,
功能int,
TeamID int,
轨道类型int,
迭代整数
)
插入@tStorys(故事ID、状态、DemoStatus、Dfficulty、功能、团队ID、轨迹类型、迭代)

我不能保证所有的文件在没有BOM的情况下都是以
UTF-8编码的,所以我必须找到方法使其在
UTF-8
文件中也能正确运行。我怎么可能做到这一点呢?

只需要告诉Classic ASP和IIS您希望使用UTF-8处理ASP页面

首先保存ASP页面,确保使用代码页65001保存该页面(如果使用Visual Studio,则可以通过菜单选项完成此操作)

然后修改ASP页面以包含以下初始行



有用的链接
可以肯定的是,FileSystemObject不处理UTF-8,而是处理Unicode和ANSI。
ADODB.Stream可以处理许多字符集,包括utf-8,因此您可以使用它来代替它。
用以下代码替换
的第一个

Dim arrlines
使用Server.CreateObject(“Adodb.Stream”)
.Charset=“utf-8”
打开
.LoadFromFile文件路径
如果是的话
'如果文件为空,则为空数组
arrSqlLines=Array()
其他的
'以获得您想要的线阵列
'删除回车符(vbCr)(如果存在)
'并使用换行符(vbLf)作为分隔符拆分文本
arrSqlLines=Split(替换(.ReadText,vbCr,”),vbLf)
如果结束
.结束
以

问题在于以BOM开头的sql命令失败。更改代码页或保存ASP文件UTF-8编码不会防止SQL语法错误。