IEnumerable<string> lines = File.ReadLines(filename,Encoding.Default); 
foreach (string line in lines)
            {
                    string[] segs = line.Split('|');
                    string name = segs[0];
                    string telephone = segs[1];
                
                SQLHelper.ExecuteNonQuery("insert into myText.dbo.T_tel_company1(Name,tel) values (@name,@tel)",
                    new SqlParameter("@name",name), new SqlParameter("@tel",telephone));
                
            }
MessageBox.Show("成功导入"+lines.Count()+"条数据");
这个当数据导完之后,显示数组越界,运行不到最后一步。怎么办啊?什么地方出了问题,求各位大神帮帮忙

解决方案 »

  1.   

    你确认每行都有“|”这个字符吗,没有的话,split时就会报这个错误的。
      

  2.   

    这种问题最好的办法是自己debug调试,一步步跟踪进去很容易解决问题哦
      

  3.   

    恩 可能是数据的问题,最后的数据好像多了个回车。
    但修改之后继续运行,却又出现错误了。“无法从已关闭的 TextReader 中读取。”这个要怎么解决啊??百度了一下没解决的了
      

  4.   

    debug 了,一步步跟踪了,数据都传进去了。
    可能是数据的问题,最后的数据好像多了个回车。
    但修改之后继续运行,却又出现错误了。“无法从已关闭的 TextReader 中读取。”这个要怎么解决啊??百度了一下没解决的了
      

  5.   

    可能是数据的问题,最后的数据好像多了个回车。
    但修改之后继续运行,却又出现错误了。“无法从已关闭的 TextReader 中读取。”这个要怎么解决啊??
    百度了一下说using 的问题,把MessageBox放到using中就解决了。可是这样就没用Sqlhelper了。
    有没有方法即可以用sqlhelper又可以解决“无法从已关闭的 TextReader 中读取。”这个问题的呢???
      

  6.   


    你说错了,没有要split的字符的时候,不会报错,还是会返回string[],不过里面是字符本身
    例如
      string line = "ABC";
      string[] segs = line.Split('|');最后结果是 segs长度为1,segs[0] =  "ABC";  
    不信可以去试
      

  7.   


    你说错了,没有要split的字符的时候,不会报错,还是会返回string[],不过里面是字符本身
    例如
      string line = "ABC";
      string[] segs = line.Split('|');最后结果是 segs长度为1,segs[0] =  "ABC";  
    不信可以去试是我没说清楚,当没有“|”的时候,split的结果会产生只有一个数据的数组,那么之后调用segs[1]的时候,肯定就会报数组越界的错误。
      

  8.   

    可能是数据的问题,最后的数据好像多了个回车。
    但修改之后继续运行,却又出现错误了。“无法从已关闭的 TextReader 中读取。”这个要怎么解决啊??
    百度了一下说using 的问题,把MessageBox放到using中就解决了。可是这样就没用Sqlhelper了。
    有没有方法即可以用sqlhelper又可以解决“无法从已关闭的 TextReader 中读取。”这个问题的呢???在这句代码后面加上IEnumerable<string> lines = File.ReadLines(filename,Encoding.Default);
    int count = lines.Count();
     然后把最后的代码改成:MessageBox.Show("成功导入"+count+"条数据");
      

  9.   

    可能是数据的问题,最后的数据好像多了个回车。
    但修改之后继续运行,却又出现错误了。“无法从已关闭的 TextReader 中读取。”这个要怎么解决啊??
    百度了一下说using 的问题,把MessageBox放到using中就解决了。可是这样就没用Sqlhelper了。
    有没有方法即可以用sqlhelper又可以解决“无法从已关闭的 TextReader 中读取。”这个问题的呢???在这句代码后面加上IEnumerable<string> lines = File.ReadLines(filename,Encoding.Default);
    int count = lines.Count();
     
    不行,还是报错。但你再次运行的时候会和打开文件出来,
    然后把最后的代码改成:MessageBox.Show("成功导入"+count+"条数据");

      

  10.   

    int count = 0;
    每次循环开头或者结尾 count++;
      

  11.   

    可能是数据的问题,最后的数据好像多了个回车。
    但修改之后继续运行,却又出现错误了。“无法从已关闭的 TextReader 中读取。”这个要怎么解决啊??
    百度了一下说using 的问题,把MessageBox放到using中就解决了。可是这样就没用Sqlhelper了。
    有没有方法即可以用sqlhelper又可以解决“无法从已关闭的 TextReader 中读取。”这个问题的呢???在这句代码后面加上IEnumerable<string> lines = File.ReadLines(filename,Encoding.Default);
    int count = lines.Count();
     
    不行,还是报错。但你再次运行的时候会和打开文件出来,
    然后把最后的代码改成:MessageBox.Show("成功导入"+count+"条数据");

    修正之前的改法,你只要把File.ReadLines改成File.ReadAllLines应该就可以了。
      

  12.   

    ReadLines在某个.Net Framework版本好像是有bug的,详细在这里。我机器上现在装的.Net Framework 4.5是没有这样问题的。你可以考虑升级一下你的.Net Framework。