c# - 在c#中将文本文件存储到mysql数据库中

标签 c# mysql c#-4.0

我通过c#读取文件,文件的格式是这样的。
输入文件

00001740,      0.125,      0,      able
00001740,      0.125,      0,      unable
00002098,      0,          0.75,   country
00002312,      0,          0,      love    

我想要这个文件在 MYSQL 数据库中。我编写的代码将每一行存储在数据库的每个行中。但以下代码仅写入文本文件的第一行

 private void button1_Click(object sender, EventArgs e)
        {
            string MyConString = "server=localhost;" +
                "database=zahid;" + "password=zia;" +
                "User Id=root;";
            MySqlConnection connection = new MySqlConnection(MyConString);
            MySqlCommand command = connection.CreateCommand();
            MySqlDataReader Reader;
            connection.Open();
            StreamReader reader = new StreamReader("D:\\out.txt");

            string line;
            while ((line = reader.ReadLine()) != null)
            {   
                string[] parts = line.Split(',');
                command.CommandText = "insert into score(POS_ID,Pos,Neg,Word) values('" + parts[1] + "','" + parts[2] + "','" + parts[3] + "','" + parts[4] + "')";



                Reader = command.ExecuteReader();      
            }
        } 

此代码仅返回第一行,但我希望文本文件的所有行都存储在数据库中。提前致谢

最佳答案

尝试清理困惑:

private void button1_Click(object sender, EventArgs e)
{
    string[] lines = File.ReadAllLines("D:\\out.txt");
    foreach (var line in lines)
    {
        var data = line.Split(new[] { ',' }, 4);
        int posId = int.Parse(data[0].Trim());
        double pos = double.Parse(data[1].Trim());
        double neg = double.Parse(data[2].Trim());
        string word = data[3].Trim();
        StoreRecord(posId, pos, neg, word);
    }
}

private void StoreRecord(int posId, double pos, double neg, string word)
{
    var conStr = "server=localhost; database=zahid; password=zia; User Id=root;";
    using (var connection = new MySqlConnection(conStr)) 
    using (var command = connection.CreateCommand())
    {
        connection.Open();
        command.CommandText = 
        @"INSERT INTO score 
            (POS_ID, Pos, Neg, Word) 
          VALUES 
            (@posId, @pos, @neg, @word)";
        command.Parameters.AddWithValue("@posId", posId);
        command.Parameters.AddWithValue("@pos", pos);
        command.Parameters.AddWithValue("@neg", neg);
        command.Parameters.AddWithValue("@word", word);
        command.ExecuteNonQuery();
    }
}

注意事项:

  • 将数据库插入逻辑分离到专用方法中,以避免在同一位置进行解析和数据库插入
  • 使用using语句来正确处置IDisposable资源,例如连接和命令
  • 使用参数化查询来避免 SQL 注入(inject)

而且您可能不想成为 rolling your own CSV parser使用 String.Split 但使用真正的 CSV 解析器。

如果 CSV 文件很大,您可以一次读取一行,以避免一次将其加载到内存中:

private void button1_Click(object sender, EventArgs e)
{
    using (var stream = File.OpenRead("D:\\out.txt"))
    using (var reader = new StreamReader(stream))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            var data = line.Split(new[] { ',' }, 4);
            int posId = int.Parse(data[0].Trim());
            double pos = double.Parse(data[1].Trim());
            double neg = double.Parse(data[2].Trim());
            string word = data[3].Trim();
            StoreRecord(posId, pos, neg, word);
        }
    }
}

关于c# - 在c#中将文本文件存储到mysql数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184334/

相关文章:

wcf - 尝试调用 WCF webservice 4.0 时获取返回类型无效错误

c# - 为什么无法在控件的构造函数中获取资源

mysql - phpMyAdmin SQL - 临时表

php - 如何获取 max(colUmn) 值,其中 colUmn 是 mySQL 中的 TimeStamp 类型

Pythonanywhere MySQL 连接

entity-framework - 未找到具有不变名称 'System.Data.SqlServerCe.4.0' 的 ADO.NET 提供程序的 Entity Framework 提供程序

c# - Silverlight:为什么这个绑定(bind)表达式不起作用?

c# - 防止鼠标离开我的表单

c# - 将单线程应用程序迁移到多线程、并行执行、蒙特卡洛模拟

linq-to-sql - LINQ : Specified cast is not valid occurs intermittedly