2017-03-23 76 views
0

我试图将文本文件数据插入到sql服务器数据库,这里是我的示例代码,当我执行此操作时,只有文本的第一行文件(10,sac,10 hung vuong)保存到数据库中,但此错误是发生当数据插入到数据库时发生数组错误时发生错误

System.IndexOutOfRangeException是未处理
指数数组的 范围之外。

示例文本文件

10,sac,10 hung vuong 

11,mad,11 Hung call 

22,wick,22 Hung poll 

这里是我的代码

string line; 

using (SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=texttodb;Integrated Security=True")) 
    { 
     con.Open(); 
     using (StreamReader file = new StreamReader(@"E:\a.txt")) 
     { 
      while((line = file.ReadLine()) != null) 
       { 
        string[] fields = line.Split(','); 

        SqlCommand cmd = new SqlCommand("INSERT INTO tblUser(id, name, address) VALUES (@id, @name, @address)", con); 
        cmd.Parameters.AddWithValue("@id", fields[0].ToString()); 
        cmd.Parameters.AddWithValue("@name", fields[1].ToString()); 
        cmd.Parameters.AddWithValue("@address", fields[2].ToString()); 
        cmd.ExecuteNonQuery(); 
       } 
     } 
    } 

回答

0

那么,如果这是确切的文本文件

10,sac,10 hung vuong 

11,mad,11 Hung call 

22,wick,22 Hung poll 

你必须每个之间的空白行数据线。编辑文件:

10,sac,10 hung vuong  
11,mad,11 Hung call  
22,wick,22 Hung poll 

或把一个条件

if (line.Length > 0) { 
     string[] fields = line.Split(','); 
     .... 
} 
+0

谢谢你,它的工作:) – SMW

+0

的的长度即使该行的长度大于0,“字段”字符串数组仍然可能不是3。这就是为什么我建议在尝试访问数组中的字符串之前检查数组的实际长度。 – mm8

+0

@ mm8你是对的,但是字段数是一个不同的验证*(并且OP也应该包括它)*。但是你也可以检查很多其他的东西,比如第一个字段必须是整数等,但是对于在分割之前应该发生的“空行”验证。空字符串的分割没有意义。 –

2

确保您跳过任何空行:

while ((line = file.ReadLine()) != null) 
{ 
    string[] fields = line.Split(','); 
    if(fields.Length == 3) //<-- 
    { 
     SqlCommand cmd = new SqlCommand("INSERT INTO tblUser(id, name, address) VALUES (@id, @name, @address)", con); 
     cmd.Parameters.AddWithValue("@id", fields[0].ToString()); 
     cmd.Parameters.AddWithValue("@name", fields[1].ToString()); 
     cmd.Parameters.AddWithValue("@address", fields[2].ToString()); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

谢谢,我会试试:) – SMW

相关问题