小编典典

如何导入文本文件并将数据保存到数据库?

sql

我有这个项目:

  1. 导入.txt文件
  2. 连接到SQL Server数据库
  3. 将所有数据转移到数据库中

文本文件按选项卡划分为四个字段,例如数据库。

我已经完成了使用富文本框并将所有数据保存在字符串中的第一步。我的想法是将字符串拆分为每行并将其保存在数组中,然后:如何拆分每一行,以便可以正确保存字段?如何将SQL
Server上的数据库连接到C#上的项目?


阅读 202

收藏
2021-04-28

共1个答案

小编典典

让我们一次解决这一步骤…

获取数据:


将文本文件转换为字符串变量。

string readText = File.ReadAllText("path to my file.txt");

这里更多

现在我们有了一个字符串,我们可以 解析

List<string> listStrLineElements = List<string> listStrLineElements = line.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList();// You need using System.Linq at the top.

现在,您需要将每个元素拆分为自己的行;您说过使用制表 符定界
很不错(现代更常见的是逗号分隔(CSV),但制表符可以使用!)…为此,我们可以执行以下操作:

List<string> rowList = listStrLineElements.SelectMany(s => s.Split('\t')).ToList();// The \t is an *escape character* meaning tab.

现在,您需要类似循环的功能来遍历这些条目中的每一项并将其插入数据库中,这意味着我们现在需要数据库连接…

连接到数据库


代码项目(另一个有用的网站)具有上进行从C#SQL连接教程;
以下是代码摘要(请阅读文章,此网站不是让人们代表您编写/查找代码的地方!)

确保您使用的是SQL名称空间…

using System.Data.SqlClient;

    private void sqlCon(List<string> x)
    {
        //Replace with your server credentials/info
        SqlConnection myConnection = new SqlConnection("user id=username;" +"password=password;server=serverurl;" +"Trusted_Connection=yes;" +"database=database; " + "connection timeout=30");
        try
        {
            myConnection.Open();
            for (int i = 0; i <= x.Count -4; i += 4)//Implement by 3...
            {
                //Replace table_name with your table name, and Column1 with your column names (replace for all).
                SqlCommand myCommand = new SqlCommand("INSERT INTO table_name (Column1, Column2, Column3, Column4) " +
                                     String.Format("Values ('{0}','{1}','{2}','{3}')", x[i], x[i + 1], x[i + 2], x[i + 3]), myConnection);
                myCommand.ExecuteNonQuery();
            }

        }
        catch (Exception e){Console.WriteLine(e.ToString());}
        try{myConnection.Close();}
        catch (Exception e){Console.WriteLine(e.ToString());}
    }

请注意,您很可能必须更改/编辑我的循环;其背后的逻辑是将i乘以4,因此您可以读取每列,因此Count(条目数)列必须少4,这样您就不会超出索引范围(在记事本I中键入所有内容)我不确定我的逻辑是否正确,但是再次,如果那是错误的,那您就必须解决,我们不只是为人们编写代码。

请注意!

诸如string.format()之类的东西让您可以进行 SQL注入 ,您确实应该查找SQL参数,但这可以完成工作。

2021-04-28