【问题标题】:converting html symbol code before sql insert stmt在sql插入stmt之前转换html符号代码
【发布时间】:2011-10-24 14:37:07
【问题描述】:

我正在尝试使用 VB.net 将 SQL Express 表中的一些数据导出到 Access。数据在 SQL 中正确显示为,例如,带有小度数对象的温度和表示华氏温度或摄氏度的字母 F 或 C。该字符当然由 html 代码中的 ° = "°" 表示,这就是我的访问表中出现的内容。

如何让插入语句正确传递此符号?我有数千条记录,这适用于我正在运行此转换的数百个数据库中的每一个中的大约一百条左右。

我从 Gridview 和 .aspx .net 网页读取数据,然后使用带有 Access OLEDB 连接的插入查询。

SQLString1 = "INSERT INTO tblFornStrings (Str_ID, Code, Str_Name, Srt_Text, Lng_Text, Alt_Text) "
                            SQLString1 = SQLString1 & "VALUES ('" & StrngID & "', "
                            SQLString1 = SQLString1 & "'" & Code & "',"
                            SQLString1 = SQLString1 & "'" & Str_Name & "',"
                            SQLString1 = SQLString1 & "'" & newText1 & "',"
                            SQLString1 = SQLString1 & "'" & newText2 & "',"
                            SQLString1 = SQLString1 & "'" & newText3 & "')"
                            '  SQLString1 = SQLString1 & "'" & tblSource & "')"

                            Dim dbCommand1 = New OleDbCommand(SQLString1, pConn)

                            pConn.Open()
                            dbCommand1.ExecuteNonQuery()
                            dbCommand1 = Nothing

这是有数据的两个字段,newText1 = Srt_Text,newText2 = Lng_Text

我现在尝试将其设为参数化查询,因为我已经读过它允许在没有编码问题的情况下复制字符串。它不起作用。这是使用参数的另一个版本的 INSERT 代码。

Dim SqlString As String = "INSERT INTO Strings (Str_ID, Code, Str_Name, Srt_Text, Lng_Text, Alt_Text) Values (?,?,?,?,?,?)"
Using cmd As New OleDbCommand(SqlString, pConn)
     cmd.CommandType = CommandType.Text
     cmd.Parameters.AddWithValue("Str_ID", StrngID)
     cmd.Parameters.AddWithValue("Code", Code)
     cmd.Parameters.AddWithValue("Str_Name", Str_Name)
     cmd.Parameters.AddWithValue("Srt_Text", newText1)
     cmd.Parameters.AddWithValue("Lng_Text", newText2)
     cmd.Parameters.AddWithValue("Alt_Text", newText3)

     pConn.Open()
     cmd.ExecuteNonQuery()
     pConn.Close()
End Using

输出与图形中显示的第一个代码块的输出相同。

感谢您的任何建议。

【问题讨论】:

  • 这要么是一个技巧问题,要么是对 Replace 函数的简单调用(在将源自 HTML 的字符串值插入 SQL 语句之前)都应该完成工作,如下所示:Replace(newText1, " °", Chr(176))
  • @Yarik,感谢您的回复,这不是一个技巧问题。您的解决方案适用于一种语言。问题是代码需要能够支持任何可能添加到网站的语言。所以你的代码很适合说法语,以及所有有这个问题的代码。突然之间,添加了泰语或意大利语,并且出现了一组全新的例外情况。关于如何避免返回并添加替换 stmts 的任何想法?谢谢,
  • 嗯……我已经很久没有处理 i18n 问题了,所以我希望你能原谅我问这个问题:不同的语言究竟是如何影响这个问题的?我认为问题只是所谓的 HTML 编码:在实际的 HTML 文档中,一些字符是 HTML 编码的,这就是它们从 Gridview 中出来的方式,所以你需要在录制之前找到一种方法来对它们进行 HTML 解码将所有数据导入数据库。 (待续)
  • 在这种情况下,一个特定的字符可以通过简单地调用 Replace 函数来处理;但是,如果您需要更通用的解决方案,则必须找到(或编写自己的,至少部分实现)HTML 解码功能 - 可以查找任何模式的功能,例如 "(\d+);"并将它们替换为具有适当数字代码的字符......但我仍然不明白为什么语言在这里很重要。请澄清(也许通过编辑原始问题本身;-)如果这不是太麻烦。
  • 让我尝试从一个稍微不同的角度来处理它。所以你有一些从 Gridview 中提取的字符串,到目前为止,你正在“按原样”使用这些字符串来构建 SQL 语句(或设置参数化数据库命令的参数值)。现在,如果不是“按原样”使用它们,而是先解码它们会发生什么 - 例如通过将它们传递给 HttpUtility.HtmlDecode(...) 方法? (有关详细信息,请参阅msdn.microsoft.com/en-us/library/…。)

标签: sql vb.net ms-access


【解决方案1】:

因此,您从 Gridview 中提取了一些字符串,并且到目前为止,您“按原样”使用这些字符串来构建 SQL 语句(或为参数化数据库命令设置参数值)。现在,如果不是“按原样”使用它们,而是先解码它们会发生什么 - 例如通过将它们传递给HttpUtility.HtmlDecode(...) 方法? (详情请参阅this MSDN page。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多