当数据插入数据库时​​,索引超出了数组错误的范围

时间:2017-03-23 18:48:36

标签: c# sql-server indexoutofrangeexception

我试图将文本文件数据插入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();
                }
        }
    }

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分: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(',');
      ....
 }