c# 从XML中读取数据写入datatable中,可执行时出错‘指定的参数已超出有效值的范围’,请大虾帮忙!!

DataSetds=newDataSet();ds.ReadXml(fileEntry);for(Int32i=0;i<ds.Tables["Data"].Rows.Co... DataSet ds = new DataSet();
ds.ReadXml(fileEntry);

for (Int32 i = 0; i < ds.Tables["Data"].Rows.Count; i++)
{
if (ds.Tables["Data"].Rows[i][5].ToString() == "0")
{

//string s1 =
DataRow row = dt.NewRow();
row["order"] = ds.Tables["Data"].Rows[i][3].ToString().Substring(8, 10);
row["getno"] = ds.Tables["Data"].Rows[i][4].ToString();
dt.Rows.Add(row);
//ds.Dispose();
break;
//string s2 = ds.Tables["Data"].Rows[i][0].ToString();
//string s3 = ds.Tables["Data"].Rows[i][3].ToString().Substring(4, 4);
//string s4 = ds.Tables["Data"].Rows[i][5].ToString();

}
}
我以前只学过一点VB,对C#理解得不好,现在是赶鸭上架了,请大虾在帮忙时说得详细一些好吗?这是什么原因造成的,如何解决呢?
另外, row["order"] = ds.Tables["Data"].Rows[i][3].ToString().Substring(8, 10); 这句话是什么意思?最好解释得详细一些。
展开
 我来答
reakylee
2011-09-20 · TA获得超过2104个赞
知道小有建树答主
回答量:719
采纳率:100%
帮助的人:711万
展开全部
1.“指定的参数已超出有效值的范围” 应该是 Rows[i][5] 数组的下标超出范围了,也就是说数据表中没有那么多个栏位,先解释一下
ds.Tables["Data"] 表示 dataset (一个 dataset 中可以用许多个 datatable, datatable 中实际放的是一行行的数据, dataset 是一个指向它下面各个datatable的指针) 下面的 名称为 Data 的 datatable(数据表)
Rows[i] 表示 第 i 行数据,
Rows[i][5] 表示第 i 行的第 6 个栏位(C# 的数组是从 0 开始的)。
你的问题应该是datatable 中没有那么多栏位( 小于 5 个), 但实际引用时却引用了,所以超出范围。解决方法是检查XML文件的结构是否正确,确保要的栏位都有(最少6个);也可以改程序,不读这么多栏位。
2. row["order"] = ds.Tables["Data"].Rows[i][3].ToString().Substring(8, 10); 分开解释给你
row["order"] 表示定义了一个结构和 dt 表(你贴的代码中没有它的定义语句,应该在其他什么地方)一样的数据行,这个数据行中有 order 和 getno 两个栏位,而这句话就是给他赋值的。
ds.Tables["Data"].Rows[i][3] 前面已经解释过了,就是数据集ds 下面 叫 Data 的数据表中第 i 行的第 4 个栏位的值
ToString().Substring(8, 10) 是将栏位中的值强制转换为字符串,并截取第 9 ~ 11 个字符
icecoobe
2011-09-20 · TA获得超过1989个赞
知道小有建树答主
回答量:1058
采纳率:100%
帮助的人:1112万
展开全部
先检查你的xml格式对不对,里面是不是匹配数据库的格式。
root节点对应DBname,此节点,对应表明,再次节点对应列名。。。上MSDN上看下xml dataset的那一栏。确保XML解析没问题之后再说。

这个是我以前的回答,你看看对你有没有帮助
http://zhidao.baidu.com/question/283835855.html

substring楼上已经讲了,我就不重复了,以后关于函数接口不了解的,就直接搜索下,网上很多解释的,编程要经常使用google和msdn各大手册的。
追问
谢谢大虾,不是很懂,听从您的建议,先去msdn 学一下再说
追答
恩。。。MSDN好东西!看我那个例子里面,有验证XML读取有没有成功!这个是个编程习惯,函数首部要加入一些输入方面的校验,有问题就能提前定位,也方便了以后的排错,你先看MSDN吧,看看你的XML格式对不对,程序解析xml成功没
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
noahok
2011-09-20 · 超过48用户采纳过TA的回答
知道答主
回答量:145
采纳率:0%
帮助的人:131万
展开全部
ds.ReadXml(fileEntry);
这一句是您的数据来源,因为只有一段程序,所以不好说fileEntry具体是什么内容,应该是来自一个Xml格式的文件内容。
读取到这个内容后,把它注入ds创建的Tabel中。
row["order"] = ds.Tables["Data"].Rows[i][3].ToString().Substring(8, 10);
意思理解为"行"order的 值 等于创建的表Data中第 i 行第3列的字符串中索引从8~10组成的字符串,也就是第9~11个符共3个字符。

从错误提示看,应该是数据格式不符合要求所致,具体还要看错误提示在哪一行?比对一下取值和赋值的数据格式是否一致。例如:你这里取到的值Substring(8, 10);取到的是3个字符串,而row["order"] 定义的却是数值型或者日期型或者整型,那肯定是要报错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友dfffffb1
2011-09-20 · TA获得超过906个赞
知道小有建树答主
回答量:260
采纳率:50%
帮助的人:100万
展开全部
row["order"] = ds.Tables["Data"].Rows[i][3].ToString().Substring(8, 10);
//截取数据表的第i行的第三列的值,比如字符串“abcdefghight”.subString(8,10);得到的结果为“igh”。。既将字符串从第八位截取到第十位。。
至于“指定的参数已超出有效值的范围”,我帮不上你了。。。。
希望你能早点解决。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Na年花开
2011-09-20 · 超过54用户采纳过TA的回答
知道答主
回答量:435
采纳率:0%
帮助的人:221万
展开全部
你写的看是不是已经超过索引范围 是空值的话 你的那个 substring 就已经分报错他的意思是取的数据 从第八个数然后载十个字符 记的下标是从几开始的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式