Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据插入数据库时发生数组错误,索引超出了数组的界限_C#_Sql Server_Indexoutofrangeexception - Fatal编程技术网

C# 将数据插入数据库时发生数组错误,索引超出了数组的界限

C# 将数据插入数据库时发生数组错误,索引超出了数组的界限,c#,sql-server,indexoutofrangeexception,C#,Sql Server,Indexoutofrangeexception,我正在尝试将文本文件数据插入到sql服务器数据库,这是我的示例代码,当我执行此操作时,只有文本文件的第一行(10,sac,10 hung voung)保存到数据库中,出现此错误 System.IndexOutOfRangeException未处理 指数超出了标准 数组的边界 示例文本文件 10,sac,10 hung vuong 11,mad,11 Hung call 22,wick,22 Hung poll 这是我的密码 string line; using (SqlConnectio

我正在尝试将文本文件数据插入到
sql
服务器数据库,这是我的示例代码,当我执行此操作时,只有文本文件的第一行
(10,sac,10 hung voung)
保存到数据库中,出现此错误

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();
                }
        }
    }

如果这是一个精确的文本文件

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(',');
      ....
 }

如果这是一个精确的文本文件

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(',');
      ....
 }

确保跳过任何空行:

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();
    }
}
while((line=file.ReadLine())!=null)
{
string[]fields=line.Split(',');

如果(fields.Length==3)/请确保跳过任何空行:

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();
    }
}
while((line=file.ReadLine())!=null)
{
string[]fields=line.Split(',');

如果(fields.Length==3)//谢谢,我会试试:)谢谢,我会试试:)字段的长度即使行的长度大于0,字符串数组也可能不是3。这就是为什么我建议在尝试访问数组中的字符串之前检查数组的实际长度。@mm8您是对的,但字段数是另一种验证(OP也应该包括它)但是你也可以检查很多其他的东西,比如第一个字段必须是整数,等等。但是对于拆分之前应该发生的
“空行”
验证。对空字符串进行拆分没有意义。当然:)你的答案没有错。这只是一个注释,主要是为了操作。字段的长度即使行的长度大于0,字符串数组也可能不是3。这就是为什么我建议在尝试访问数组中的字符串之前检查数组的实际长度。@mm8您是对的,但字段数是另一种验证(OP也应该包括它)但是你也可以检查很多其他的东西,比如第一个字段必须是整数,等等。但是对于拆分之前应该发生的
“空行”
验证。拆分空字符串没有意义。当然:)你的答案没有错。这只是一个注释,主要是为了OP。