400中日文查询涉及的CCSID问题
问题描述:
现想做一个以400为数据库,前台为ASP.NET的系统,实现数据的增删改查。客户端为PC机,操作系统既有中文,也有日文,要操作的数据也是既有中文也有日文。
现在的问题是在中日文客户端下显示所有记录时,没有问题,但是如果想用画面输入来作为条件,去400某个文件中查询时,程序就会中断、报错。且只在“客户端为中文时,用日文输入法写入日文,到系统中查询日文字段”和“客户端为日文时,用中文输入法输入法写入中文,到系统中查询中文字段”这两种情况下出错。
请高手指点,不胜感激!
环境:
数据库:AS400下的物理文件(中文字段CCSID为935、日文字段CCSID为5026)
客户端:N台PC机、Win操作系统(中日文环境都有)
数 据:中日英都有
开发工具:ASP.NET(VB)
出错代码:
- Protected Sub btn_Confirm_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_Confirm.Click
- Dim dbcnt400 As OleDbConnection
- dbcnt400 = New OleDb.OleDbConnection()
- Dim dap1 As New OleDbDataAdapter
- dbcnt400.ConnectionString = System.Configuration.ConfigurationManager.AppSettings("ConnString").ToString()
- dbcnt400.Open()
- dap1 = New OleDb.OleDbDataAdapter("select FTEST FROM TESTDATA.DDTBYP where TESTCD='" & Trim(txt_CD.Text) & "' ORDER BY TESTOR", dbcnt400)
- Dim ds As New Data.DataSet
- ds.Clear()
- dap1.Fill(ds, "tab1")
- Dim model As FarPoint.Web.Spread.Model.DefaultSheetDataModel = New FarPoint.Web.Spread.Model.DefaultSheetDataModel(ds)
- FpSpread1.Sheets(0).DataModel = model
- FpSpread1.DataBind()
- End Sub
复制代码
出错位置:dap1.Fill(ds, "tab1")
错误信息:
SQL0302: Conversion error on host variable or parameter S1.
详细信息:
- SQL0302: Conversion error on host variable or parameter S1.
- Cause . . . . . : Host variable or parameter S1 or entry 2 in a descriptor area contains a value that cannot be converted to the attributes required by the statement. Error type occurred. Error types and their meanings are: 1 -- Overflow. 2 -- Floating point overflow. 3 -- Floating point underflow. 4 -- Floating point conversion error. 5 -- Not an exact result. 6 -- Numeric data that is not valid. 7 -- Double-byte character set (DBCS) or UTF-8 data that is not valid. 8 -- C NUL-terminator is missing for character host variables or double NUL-terminator is missing for graphic host variables and the program was compiled with the *CNULRQD option. 9 -- Truncation when mapping a host variable or constant to a character or binary parameter on a CALL statement, or when using a character or graphic host variable in a GET DESCRIPTOR or SET DESCRIPTOR statement. 10 -- Incompatible conversion from the input SQLDATA value to the specified SQLTYPE in a REXX application. 11 -- Overflow on translation of UTF-8 character data. If the host variable name is *N and the statement is FETCH, a descriptor area was specified. If the parameter name is *N and the statement is CALL, a descriptor area, a constant, or a special register was specified. Recovery . . . : Change the value of the host variable or parameter or entry in the descriptor area so that it can be converted and is valid. Try the request again.
复制代码
如果有什么需要更详细解释的,请跟帖提问。
感谢大家的帮助。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
我记得一个表只能选择一种语言,如果顺利解决的话顺便告诉一下处理过程 学习 学习
感谢各位的回复和关注,朋友那边最后决定折中,中文下能查中文,日文下能查日文。
不要求完美了。
再次感谢大家。
感谢 llfgod 的回复,使用你推荐的方法测试过后,问题仍然存在,ccsid:13488是图形码,将400中的数据提取到IE中显示时是乱码。
各位老大,还有什么好办法,请提供一下~~~
可以考虑用UCS-2型?这个貌似能解决!而且我记得前台也能支持!CCSID是13488
感谢轻舟回复
测试之前做了,中文查中文,日文下查日文都没有问题,混合查询我记得也做了,全角输入的也没有问题
现在的问题就是客户端机器中日文都有,而且“品名”,分中日英三个内容。
中日都有的混乱环境是肯定不能改变的。
mxpy回复的方法我发给我朋友了,现在还没给我回信。
各位老大,还有什么其他的解决办法吗?
我觉得LZ的环境比较复杂,你可以按照以下分类进行测试:
1。日文WINXP/日文5250/日文查询日文数据文件界面
2。中文WINXP/中文5250/中文查询中文数据文件界面
混合查询容易产生乱码和错误。
非常感谢,我去试一下
这个是帮朋友发的,稍后有结果我再来回复
我也碰到了类似的问题,试试用CAST(FIELD as TYPE CCSID )看能不能解决你的问题?
我的问题是通过CAST,有些值中包含有“?”,就会出现问题,用的是CA的OLEDB和.Net OLEDB都一样,但用MS OLEDB for DB2就算是有"?"也不会出现错误信息