C#-将文本文件中的第一列插入数据库
我想从文本文件中读取,并将他的第一列作为行插入数据库 这是文本文件的外观:C#-将文本文件中的第一列插入数据库,c#,mysql,sql,C#,Mysql,Sql,我想从文本文件中读取,并将他的第一列作为行插入数据库 这是文本文件的外观: 1264311 | SMS_DR | DELIVERED 373414 | SMS_DR | EXPIRED 418 | SMS_DR | UNDELIVERABLE 1628984 | SMS_MT | 我只想获取具有整数值的第一列,并将它们作为一行插入到我的数据库中,以实现以下目的: DELIVERED EXPIRED UNDELIVERABLE BLABLA 1264311
1264311 | SMS_DR | DELIVERED
373414 | SMS_DR | EXPIRED
418 | SMS_DR | UNDELIVERABLE
1628984 | SMS_MT |
我只想获取具有整数值的第一列,并将它们作为一行插入到我的数据库中,以实现以下目的:
DELIVERED EXPIRED UNDELIVERABLE BLABLA
1264311 373414 418 1628984
当我运行代码时,它会插入所有4行,这是我的代码:
sr1 = new StreamReader("C:\\Users\\adamoui\\Desktop\\Statjbm_20161009.txt");
string[] allLines1 = File.ReadAllLines("C:\\Users\\adamoui\\Desktop\\Statjbm_20161009.txt");
for (int i = 0; i < allLines1.Length; i++)
{
string[] column = allLines1[i].Split(new char[] { '|' });
SqlCommand cmdJBM = new SqlCommand("INSERT INTO dbo.StatJBM_NEW (Noeud, Total_MT, Date, DELIVERED, EXPIRED, UNDELIVERABLE) VALUES (@Noeud, @Total_MT, @Date, @DELIVERED, @EXPIRED, @UNDELIVERABLE)", con);
cmdJBM.Parameters.AddWithValue("@Noeud", "JBM");
cmdJBM.Parameters.AddWithValue("@DELIVERED", column[0]);
cmdJBM.Parameters.AddWithValue("@EXPIRED", column[0]);
cmdJBM.Parameters.AddWithValue("@UNDELIVERABLE", column[0]);
cmdJBM.Parameters.AddWithValue("@Total_MT", column[0]);
cmdJBM.Parameters.AddWithValue("@Date", DateTime.Now.AddDays(-1));
cmdJBM.ExecuteNonQuery();
}
con.Close();
sr1=newstreamreader(“C:\\Users\\adamoui\\Desktop\\Statjbm_20161009.txt”);
字符串[]allLines1=File.ReadAllLines(“C:\\Users\\adamoui\\Desktop\\Statjbm_20161009.txt”);
对于(int i=0;i
结果:
摆脱循环并执行以下操作:
cmdJBM.Parameters.AddWithValue("@DELIVERED", allLines1[0].Split(new char[] { '|' })[0]);
foreach (var record in records)
con.Execute(InsertRecordCommand, record);
如果您知道文件的索引和确切行数,您可以将索引直接放入代码中。您的代码使用第一列作为所有参数,为每行插入一行。可能不是你想的那样。试试这个:
var values = allLines1.Split('|')
.Select(arr => arr[0])
.ToArray();
SqlCommand cmdJBM = new SqlCommand(@"INSERT INTO dbo.StatJBM_NEW
(Noeud, Total_MT, Date, DELIVERED, EXPIRED,
UNDELIVERABLE) VALUES (@Noeud, @Total_MT, @Date,
@DELIVERED, @EXPIRED, @UNDELIVERABLE)", con);
cmdJBM.Parameters.AddWithValue("@Noeud", "JBM");
cmdJBM.Parameters.AddWithValue("@DELIVERED", values[0]);
cmdJBM.Parameters.AddWithValue("@EXPIRED", values[1]);
cmdJBM.Parameters.AddWithValue("@UNDELIVERABLE", values[2]);
cmdJBM.Parameters.AddWithValue("@Total_MT", values[3]);
cmdJBM.Parameters.AddWithValue("@Date", DateTime.Now.AddDays(-1));
cmdJBM.ExecuteNonQuery();
你需要这样的东西:
var delivered = allLines[0].Split(new char[] { '|' })[0];
var expired = allLines[1].Split(new char[] { '|' })[0];
var undeliverable = allLines[2].Split(new char[] { '|' })[0];
....
cmdJBM.Parameters.AddWithValue("@DELIVERED", delivered);
cmdJBM.Parameters.AddWithValue("@EXPIRED", expired);
cmdJBM.Parameters.AddWithValue("@UNDELIVERABLE", undeliverable);
首先,使用
StreamReader
打开文件,然后使用文件读取内容。ReadAllLines()
是无用的(并且您保持文件使用,因为您不处置StreamReader
)
假设文件格式良好(并且不太大,无法使用所有进程内存),则首先读取其内容:
var allLines = File.ReadAllLines(@"C:\Users\adamoui\Desktop\Statjbm_20161009.txt");
然后去掉不需要的字段(只有两个标记,我们不需要创建两个不使用的字符串):
现在您需要将行按4-4进行分组。我首先介绍一个可以在其他地方重用的助手函数(此处无错误检查):
我们还将介绍一些常量来清理代码:
const string InsertRecordCommand = "INSERT INTO dbo.StatJBM_NEW (Noeud, Total_MT, Date, DELIVERED, EXPIRED, UNDELIVERABLE) VALUES (@Noeud, @Total_MT, @Date, @DELIVERED, @EXPIRED, @UNDELIVERABLE)";
将所有物品放在一起(必要时也处理一次性物品): 现在也许是简化代码的时候了。您可能希望使用轻量级映射器,如: 仅此而已(我没有提到不要硬编码路径和使用
Environment.GetFolder()
,因为我想这只是一个示例。)请参阅Dapper文档以了解有关其配置和约定的更多详细信息,请注意,如果没有contribs,也可能是这样的:
cmdJBM.Parameters.AddWithValue("@DELIVERED", allLines1[0].Split(new char[] { '|' })[0]);
foreach (var record in records)
con.Execute(InsertRecordCommand, record);
你有逻辑错误。。。列数组中是当前行的拆分 但是为什么创建sr1=新的StreamReader而不使用它呢 File.ReadAllLines是一个用于小文件的快速版本…但是对于大文件,您可以获得OutOfMemoryException 试试这个 班级计划 { 静态void Main(字符串[]参数) {
//current line from the file
string line;
//filereader
using (var file = new StreamReader("C:\\Users\\adamoui\\Desktop\\Statjbm_20161009.txt"))
{
//list for the first columns
var firstColumnInFile = new List<string>();
//read every line
while ((line = file.ReadLine()) != null)
{
//split line
var items = line.Split('|');
// add the first column in the list;
firstColumnInFile.Add(items.First());
}
if(firstColumnInFile.Count < 4)
return;
SqlCommand cmdJBM = new SqlCommand(@"INSERT INTO dbo.StatJBM_NEW
(Noeud, Total_MT, Date, DELIVERED, EXPIRED,
UNDELIVERABLE) VALUES (@Noeud, @Total_MT, @Date,
@DELIVERED, @EXPIRED, @UNDELIVERABLE)", con);
cmdJBM.Parameters.AddWithValue("@Noeud", "JBM");
cmdJBM.Parameters.AddWithValue("@DELIVERED", firstColumnInFile[0]); //first column
cmdJBM.Parameters.AddWithValue("@EXPIRED", firstColumnInFile[1]); //second column
cmdJBM.Parameters.AddWithValue("@UNDELIVERABLE", firstColumnInFile[2]); //third column
cmdJBM.Parameters.AddWithValue("@Total_MT", firstColumnInFile[3]); //...
cmdJBM.Parameters.AddWithValue("@Date", DateTime.Now.AddDays(-1));
}
}
}
//文件中的当前行
弦线;
//文件阅读器
使用(var file=newstreamreader(“C:\\Users\\adamoui\\Desktop\\Statjbm\u 20161009.txt”))
{
//第一列的列表
var firstColumnInFile=新列表();
//读每一行
而((line=file.ReadLine())!=null)
{
//分割线
var items=line.Split(“|”);
//添加列表中的第一列;
添加(items.First());
}
if(firstColumnInFile.Count<4)
返回;
SqlCommand cmdJBM=new SqlCommand(@“插入dbo.StatJBM_new
(Noeud、总价、日期、交付、到期、,
无法交付)值(@Noeud、@Total_MT、@Date、,
@已交付,@过期,@无法交付)”,con);
cmdJBM.Parameters.AddWithValue(“@Noeud”、“JBM”);
cmdJBM.Parameters.AddWithValue(“@DELIVERED”,firstColumnFile[0]);//第一列
cmdJBM.Parameters.AddWithValue(“@EXPIRED”,firstColumnFile[1]);//第二列
cmdJBM.Parameters.AddWithValue(“@UNDELIVERABLE”,firstColumnFile[2]);//第三列
cmdJBM.Parameters.AddWithValue(“@Total_MT”,firstColumnInFile[3]);/。。。
cmdJBM.Parameters.AddWithValue(“@Date”,DateTime.Now.AddDays(-1));
}
}
}
您知道您的文件将有多少行吗?非常感谢:)这就是我需要的!
var allValues = File.ReadAllLines(@"C:\Users\adamoui\Desktop\Statjbm_20161009.txt")
.Select(x => x.Split(new char[] { '|' }, 2)[0])
.ToArray();
var yesterday = DateTime.Now.AddDays(-1);
con.Insert(Range(0, allValues.Length, 4).Select(x => {
return new {
Noeud = "JBM",
Delivered = allValues[x + 0],
Expired = allValues[x + 1],
Undeliverable = allValues[x + 2],
Total_Mt = allValeus[x + 3],
Date = yesterday
};
}));
foreach (var record in records)
con.Execute(InsertRecordCommand, record);
//current line from the file
string line;
//filereader
using (var file = new StreamReader("C:\\Users\\adamoui\\Desktop\\Statjbm_20161009.txt"))
{
//list for the first columns
var firstColumnInFile = new List<string>();
//read every line
while ((line = file.ReadLine()) != null)
{
//split line
var items = line.Split('|');
// add the first column in the list;
firstColumnInFile.Add(items.First());
}
if(firstColumnInFile.Count < 4)
return;
SqlCommand cmdJBM = new SqlCommand(@"INSERT INTO dbo.StatJBM_NEW
(Noeud, Total_MT, Date, DELIVERED, EXPIRED,
UNDELIVERABLE) VALUES (@Noeud, @Total_MT, @Date,
@DELIVERED, @EXPIRED, @UNDELIVERABLE)", con);
cmdJBM.Parameters.AddWithValue("@Noeud", "JBM");
cmdJBM.Parameters.AddWithValue("@DELIVERED", firstColumnInFile[0]); //first column
cmdJBM.Parameters.AddWithValue("@EXPIRED", firstColumnInFile[1]); //second column
cmdJBM.Parameters.AddWithValue("@UNDELIVERABLE", firstColumnInFile[2]); //third column
cmdJBM.Parameters.AddWithValue("@Total_MT", firstColumnInFile[3]); //...
cmdJBM.Parameters.AddWithValue("@Date", DateTime.Now.AddDays(-1));
}
}
}