2010-11-05 36 views
4

我正在「現代化」使用Access 2000數據庫的經典asp應用程序。如何將經典asp form post中的UTF-8數據轉換爲UCS-2以插入到SQL Server 2008 R2中?

我重寫了SQL Server 2008r2上的數據庫,並將所有字段更改爲使用新的啓用Unicode的nchar,nvarchar,ntext並導入舊數據。我也從IIS 6切換到IIS 7

經典的asp使用UTF-8收集和寫入數據。

現在,應用程序顯示在網頁中正確的舊數據,但作爲兒子,我觸摸它即:更新或插入數據被損壞。我假設我需要以某種方式在將數據寫入SQL服務器之前以某種方式將UTF-8數據從經典asp轉換爲UCS-2。

但是如何?

注意:似乎SQL Server自動將utf-8數據轉換爲可用格式,當它從訪問導入數據時。

回答

6

您必須通過在插入值的前面添加N來告訴SQL Server 2008您以unicode數據發送數據。所以它是這樣

strTest = "Служба мгновенных сообщений" 
strSQL = "INSERT INTO tblTest (test) VALUES (N'"&strTest&"')" 

N個告訴SQL服務器來處理內容爲Unicode。並且不會破壞數據。

有關更多信息,請參閱http://support.microsoft.com/kb/239530

下面是測試代碼經典ASP IIS 7 SQL Server上運行2008R2

CREATE TABLE [dbo].[tblTest](
    [test] [nvarchar](255) NULL, 
    [id] [int] IDENTITY(1,1) NOT NULL 

ASP頁

<% 

Response.CodePage = 65001 
Response.CharSet = "utf-8" 

strTest = Request("Test") 

Set cnn = Server.CreateObject("ADODB.Connection") 
strConnectionString = Application("DBConnStr") 
cnn.Open strConnectionString 



strSQL = "INSERT INTO tblTest (test) VALUES (N'"&strTest&"')" 
Set rsData = cnn.Execute(strSQL) 

%> 
<html xmlns="http://www.w3.org/1999/xhtml" charset="utf-8"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title></title> 

</head 
<body> 
    <form action="test.asp" method="post" name="form1" > 
     <br/><br/><br/><center> 
<table border="1"> 
    <tr><td><b>Test SQL Write</b> </td></tr> 
    <tr><td><input type="text" name="Test" style="width: 142px" Value="<%=strtext%>" /></td></tr> 
    <tr><td><input type="Submit" value="Submit" name "Submit" /></td></tr></table> </center> 
</form> 


</body> 
</html>