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); 这句话是什么意思?最好解释得详细一些。 展开
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); 这句话是什么意思?最好解释得详细一些。 展开
展开全部
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 个字符
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 个字符
展开全部
先检查你的xml格式对不对,里面是不是匹配数据库的格式。
root节点对应DBname,此节点,对应表明,再次节点对应列名。。。上MSDN上看下xml dataset的那一栏。确保XML解析没问题之后再说。
这个是我以前的回答,你看看对你有没有帮助
http://zhidao.baidu.com/question/283835855.html
substring楼上已经讲了,我就不重复了,以后关于函数接口不了解的,就直接搜索下,网上很多解释的,编程要经常使用google和msdn各大手册的。
root节点对应DBname,此节点,对应表明,再次节点对应列名。。。上MSDN上看下xml dataset的那一栏。确保XML解析没问题之后再说。
这个是我以前的回答,你看看对你有没有帮助
http://zhidao.baidu.com/question/283835855.html
substring楼上已经讲了,我就不重复了,以后关于函数接口不了解的,就直接搜索下,网上很多解释的,编程要经常使用google和msdn各大手册的。
追问
谢谢大虾,不是很懂,听从您的建议,先去msdn 学一下再说
追答
恩。。。MSDN好东西!看我那个例子里面,有验证XML读取有没有成功!这个是个编程习惯,函数首部要加入一些输入方面的校验,有问题就能提前定位,也方便了以后的排错,你先看MSDN吧,看看你的XML格式对不对,程序解析xml成功没
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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"] 定义的却是数值型或者日期型或者整型,那肯定是要报错了。
这一句是您的数据来源,因为只有一段程序,所以不好说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"] 定义的却是数值型或者日期型或者整型,那肯定是要报错了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
row["order"] = ds.Tables["Data"].Rows[i][3].ToString().Substring(8, 10);
//截取数据表的第i行的第三列的值,比如字符串“abcdefghight”.subString(8,10);得到的结果为“igh”。。既将字符串从第八位截取到第十位。。
至于“指定的参数已超出有效值的范围”,我帮不上你了。。。。
希望你能早点解决。。
//截取数据表的第i行的第三列的值,比如字符串“abcdefghight”.subString(8,10);得到的结果为“igh”。。既将字符串从第八位截取到第十位。。
至于“指定的参数已超出有效值的范围”,我帮不上你了。。。。
希望你能早点解决。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你写的看是不是已经超过索引范围 是空值的话 你的那个 substring 就已经分报错他的意思是取的数据 从第八个数然后载十个字符 记的下标是从几开始的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询