首页新闻找找看学习计划

dataset读取数据分行问题

0
悬赏园豆:50 [已解决问题] 解决于 2013-09-27 14:59

一个sql以for xml path('')  读取数据只在一个单元格中    但是读取到dataset的时候 就分成两行了  这是什么情况。  还有就是用excuteScalar 读取也只读取到一部分 ,而且这一部分 和dataset中读取的第一行一致。               

问题补充:

sql语句直接在sql server读出的数据如  这样子        AAAAAAABBBBBBB

 

但是利用 sqldataapdater填充到dataset中就成了    AAAAAAA

                                                                    BBBBBBB 

这样子两行   这是为什么,  我查看了这个dataset的列的最大长度,是足够的 。  

 

有谁遇到过这种情况  是哪边出了问题么

 

 

 

找到问题的根源了  不是sql语句的问题 也不是什么转义字符的问题   而是微软对 for xml path的机制问题       还是谢谢各位的时间

 

mushishi的主页 mushishi | 菜鸟二级 | 园豆:230
提问于:2013-09-26 18:48
< >
分享
最佳答案
1

The XML data row is truncated at 2,033 characters when you use the
SqlDataReader object

mushishi | 菜鸟二级 |园豆:230 | 2013-09-26 20:36

也就是它最多支持2033个字符?超过就换行是吗?

幕三少 | 园豆:1374 (小虾三级) | 2013-09-27 08:57

@幕三少:    嗯 

mushishi | 园豆:230 (菜鸟二级) | 2013-09-27 14:58

官方解释:

 如果您使用 ExecuteReader 或 BeginExecuteReader 访问 XML 数据,SQL Server 将以多行(每行 2,033 个字符)方式返回长度大于 2,033 个字符的所有 XML 结果。 若要避免发生此行为,请使用 ExecuteXmlReader 或 BeginExecuteXmlReader 读取 FOR XML 查询。 有关更多信息,请参见位于 http://support.microsoft.com 上的 Microsoft 知识库中的文章 Q310378“PRB: XML Data Is Truncated When You Use SqlDataReader”(PRB:使用 SqlDataReader 时 XML 数据被截断)

 

mushishi | 园豆:230 (菜鸟二级) | 2013-09-27 15:00
其他回答(2)
0

没整明白什么意思……

收获园豆:30
幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 18:55

比如说下面的数据,用sql连接各种表 读出来是一行的:

组装1车间H区组装1课05线9点未点检设备如下:笔记本(YM00412120015),笔记本(YM00412120020),显示器(YM00312120038),显示器(YM00312120045),主机(YM00112120074),显示器(YM00312120049),主机(YM00112120077),显示器(YM00312120061),显示器(YM00312120066),主机(YM00112120091),显示器(YM00312120075),主机(YM00112120112),主机(YM00112120130),笔记本(YM00412120051),笔记本(YM00412120054),笔记本(YM00412120058),笔记本(YM00412120060),笔记本(YM00412120061),笔记本(YM00412120063),主机(YM00112120174),主机(YM00112120217),显示器(YM00312120210),显示器(YM00312120269),笔记本(YM00412120122),显示器(YM00312120343),电动螺丝刀(YF00112120011),电动螺丝刀(YF00112120047),自动胶带机(YF00712120018),感应式离子风蛇(YE00612120018),感应式离子风蛇(YE00612120038),电子秤(YH00112120005),电子秤(YH00112120017),静电手环测试仪(YH00612120005),烙铁测温仪(YH00712120005),可程式电源(YH00912120021),可程式电源(YH00912120028),可程式电源(YH00912120054),BERING 锁附治具(YL00312120352),VODKA引线焊接工装(YL00112120290),VODKA引线焊接工装(YL00112120291),PACER-X 螺丝锁附工装(YL00312120381),Pacer-X 锁附治具(YL00312120392),Pacter-X压合工装(YL00312120397),USB线贴标签(YL00412120102),接地弹簧插座焊接工装(YL00112120454),金属底座组装治具(YL00312120510),上盖组装治具(YL00312120511)

 

 

但是 在程序里用 ado.net  填充到dataset中 确变成两行了 ;

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 18:58

@mushishi: 你这数据是怎么进去的?是不是Excel倒进去的啊?

支持(0) 反对(0) 幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 19:10

@幕三少: 不是  是直接连接各种表组合数据出来的     

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:11

@mushishi: 我是问你,数据是通过什么方式进数据库的?也就是两个数据之间可能会有/0的存在,你好检查下

支持(0) 反对(0) 幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 19:13

@幕三少:    /0  这个有什么影响?      我数据是分布在很多个表里面的  我是连接各个表的数据来生成一个信息,  和数据怎么进数据库有什么关系   我现在是取数据

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:16

@mushishi: 

 AAAAAAA

 BBBBBBB

这是两条数据还是一条数据显示成两行啊?

支持(0) 反对(0) 幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 19:19

@幕三少:  一条数据 在dataset中变成两行了  

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:23

@mushishi: 还是显示问题呗,那你就查数据里面是否包含转义字符

支持(0) 反对(0) 幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 19:25

@幕三少:  没有转移字符  这又不是html 

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:30

@幕三少:   一条数据填充到dataset还会和转移字符有关系么  我这还没有显示到页面去

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:31

@mushishi: 显示是看不到的,我前一段时间刚吃过这样的亏,你在查数据库的时候把/或\给过滤掉试下,很大的可能是这回事

支持(0) 反对(0) 幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 19:34

@幕三少: 还是说 用了for xml path的话  会有影响

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:34

@mushishi: 代码贴出来看下,估计和这关系不大

支持(0) 反对(0) 幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 19:47
0

成为两行,很可能是因为有换行符。

换行符是\n或者\r,转义之后。这个符号在文本中当然看不到,会被翻译成换行。

怎么检查呢?

你就看在A和B之间是个什么字符就行了,比如

string data=dataSet.Table[0].Rows[0]["YourClmName"].ToString(); // “AAAAAA 换行 BBBBB”

然后你在调试的状态下,查看data[7]是什么,这个7就是A和B之间的位置。

 没猜错的话,你会看到一个 \n ,它的ascii数值好像是10, 如果是 \r的话,就是13.

收获园豆:20
圆大帅 | 园豆:604 (小虾三级) | 2013-09-26 19:39

\n 是C# 中才会被认为是换行符 在sql server中转义字符是 单引号  

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:47

还有 我特意加了 \n   并不是根据\n 来换行      数据库里边还是吧\n当做字符串的  除非我直接输出到页面中

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:48

@mushishi: 是啊,所以你sqlserver中查看的是一行,在VS中查看的是两行啊

支持(0) 反对(0) 幕三少 | 园豆:1374 (小虾三级) | 2013-09-26 19:48

@mushishi: 转义不分什么语言,是文本的显示定义。

你去调试一下就知道结果了。去试试。

支持(0) 反对(0) 圆大帅 | 园豆:604 (小虾三级) | 2013-09-26 19:48

@mushishi: 不是 \r或者\n,就是其他符号,试试就知道了。调试之。

支持(0) 反对(0) 圆大帅 | 园豆:604 (小虾三级) | 2013-09-26 19:50

@江湖再见:  那位置是逗号   数据我查看了 。。。       如果是转义字符我早搞定了。。。

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 19:55

@mushishi: 依然怀疑是转义字符,因为sql拿到的数据有,那么剩下的就是显示问题了,也就是怎么翻译从sql读取到的数据,只有转义被翻译成换行才解释的通。

支持(0) 反对(0) 圆大帅 | 园豆:604 (小虾三级) | 2013-09-26 19:59

@mushishi: 按照你的说法,那个地方是换行,或者A,或者B,不可能是个逗号啊。

支持(0) 反对(0) 圆大帅 | 园豆:604 (小虾三级) | 2013-09-26 20:00

@江湖再见:  AAAABBBB 只是个描述    真实数据很长的       数据我都直接查看了,就是这样的

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 20:03

@mushishi: 那个逗号的前一个字符?后一个字符?都查看了,两行之间什么都没有?

支持(0) 反对(0) 圆大帅 | 园豆:604 (小虾三级) | 2013-09-26 20:04

@江湖再见:    就和       笔记本(YM00412120060),    一样的数据

支持(0) 反对(0) mushishi | 园豆:230 (菜鸟二级) | 2013-09-26 20:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册