我正在尝试为五列插入以下代码:
List<string> ReadFile = File.ReadAllLines(@"D:\Data.txt").ToList();
var cmdText = "INSERT INTO TEST Values (@name, @panno,@city,@Pin,@mobilenumber)";
OdbcCommand cmd = new OdbcCommand(cmdText, Conn);
Conn.Open();
foreach(var col in Readfile)
{
cmd.Parameters["@name"].Value = ReadFile[i].Split(new string[] { "," }, StringSplitOptions.None)[0];
cmd.Parameters["@panno"].Value = ReadFile[i].Split(new string[] { "," }, StringSplitOptions.None)[1];
cmd.Parameters["@city"].Value = ReadFile[i].Split(new string[] { "," }, StringSplitOptions.None)[2];
cmd.Parameters["@Pin"].Value = ReadFile[i].Split(new string[] { "," }, StringSplitOptions.None)[3];
cmd.Parameters["@mobilenumber"].Value = ReadFile[i].Split(new string[] { "," }, StringSplitOptions.None)[4];
cmd.CommandTimeout = 0;
cmd.ExecuteNonQuery();
i++;
}
Conn.Close();
我希望以上代码更有效和更快的超过50列和超过100万行插入一次在impala表,使用odbc连接。
1条答案
按热度按时间ajsxfq5m1#
如果考虑一些简单的东西,代码会变得简单得多:
1.最佳做法:使用
using
进行连接,以确保它不会泄漏。1.更好的命名:
ReadFile
不好。lines
更好,也许csvLines
更好。局部变量使用小写。1.不要重复自己(干):不要经常拆分。拆分一次,然后重用结果。
ReadFile[i]
与col
相同。请改用col
。1.更好的命名:
col
不是一个好名字,因为我假设它的意思是 column,但它不是一列,而是一行,这在修改2中变得更加明显。我想以上的一切都把你自己搞糊涂了。
之后,您的代码如下所示:
接下来你能做什么?
1.您可以在列表中的某个位置定义所有列名
1.再次减少重复:现在可以循环遍历列名并在循环中添加所有参数:
1.不要一次插入一行,而是将它们分组为更大的数量,例如100次插入。