我正在尝试为五列插入以下代码:
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();
我希望上面的代码使用 odbc 连接在 impala 表中一次插入超过 50 列和超过 100 万行更高效和快速。
如果你考虑一些简单的东西,你的代码会变得更简单:
using
进行连接以确保它不会泄漏。ReadFile
不好。 lines
更好,也许csvLines
更好。对局部变量使用小写。ReadFile[i]
等同于 col
。使用col
代替。col
不是一个好名字,因为我认为它的意思是column,但它不是一个列,而是一条线。这在变化 2 中变得更加明显。我认为以上所有内容让您感到困惑。
之后,您的代码如下所示:
List<string> csvLines = File.ReadAllLines(@"D:\Data.txt").ToList();
var cmdText = "INSERT INTO TEST Values (@name, @panno,@city,@Pin,@mobilenumber)";
OdbcCommand cmd = new OdbcCommand(cmdText, conn);
using (conn.Open()) // or similar, depending on your database
{
foreach(var line in csvLines)
{
var columns = line.Split(new string[] { "," }, StringSplitOptions.None);
cmd.Parameters["@name"].Value = columns[0];
cmd.Parameters["@panno"].Value = columns[1];
cmd.Parameters["@city"].Value = columns[2];
cmd.Parameters["@Pin"].Value = columns[3];
cmd.Parameters["@mobilenumber"].Value = columns[4];
cmd.CommandTimeout = 0;
cmd.ExecuteNonQuery();
}
} // connection will be closed here
现在,您接下来可以做什么?
List<string> columnNames = new List<string>{"name", "panno", "city", "Pin", "mobilenumber"};
int columnIndex = 0;
foreach (var columneName in columnNames)
{
cmd.Parameters["@"+columnName] = columns[columnIndex];
}