Как преобразовать данные UTF-8 из публикации Classic asp Form в UCS-2 для вставки в SQL Server 2008 r2? - PullRequest
4 голосов
/ 06 ноября 2010

Я нахожусь в процессе "модернизации" классического приложения asp, использующего базу данных Access 2000.

Я переписал базу данных на SQL Server 2008r2 и изменил все поля, чтобы использовать более новую версию Unchar с поддержкой Unicode nchar, nvarchar, ntext и импортированные старые данные.Я также переключился на IIS 7 с IIS 6

. Классический asp собирает и записывает данные с использованием UTF-8.

Теперь приложение корректно отображает СТАРОЕ данные на веб-страницах, но какЯ касаюсь этого, то есть: ОБНОВЛЕНИЕ или ВСТАВКА, данные становятся поврежденными.Я предполагаю, что мне нужно каким-то образом преобразовать данные UTF-8 из классического asp в UCS-2, прежде чем я записываю данные на SQL-сервер.

Но как?

ПРИМЕЧАНИЕ: кажется, чтоСервер sql автоматически преобразовал данные utf-8 в пригодный для использования формат при импорте данных из доступа.

1 Ответ

6 голосов
/ 06 ноября 2010

Вы должны сообщить SQL Server 2008, что отправляете данные в юникоде, добавив N в начале значения вставки. так вот как это

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

N указывает серверу SQL обрабатывать содержимое как Unicode. и не портит данные.

См. http://support.microsoft.com/kb/239530 для получения дополнительной информации.

Вот тестовый код, работающий на Classic ASP IIS 7 SQL Server 2008r2

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

ASP Page

<%

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>
...