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