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。