如何导入文本文件和保存数据到数据库

本文关键字:保存 数据 数据库 文件 文本 何导入 导入 | 更新日期: 2023-09-27 18:08:07

我有这个项目:

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

文本文件按制表符分为四个字段,以便于数据库。

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

如何导入文本文件和保存数据到数据库

让我们一步一步地解决这个问题…

获取数据:


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

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

更多信息在这里

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

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

关于在新行中分割的更多选项可以在这里找到

现在,您需要将每个元素拆分到自己的行中;你说你有tab 分隔符,这很好(像逗号分隔符(CSV)这样的东西现在更常见,但tab也可以工作!)…为此,我们可以这样做:

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

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

连接数据库


Code Projects(另一个有用的网站)有这个关于从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,这样你就不会得到一个越界的索引(在记事本中输入这一切我不确定我是否得到了所有的逻辑正确,但再次,如果它是错误的,你必须修复的东西,我们不只是为人们写代码)。

请注意!

像string.format()这样的

内容会让您打开SQL注入的大门,您确实应该查找SQL参数,但这将完成工作。以下是一些我认为必须阅读的文章:

c#中防止SQL注入

什么是SQL注入(W3-schools)

您应该在这里查看有关此主题的MSDN文档这将提供有关如何连接到SQL server数据库的一些详细信息。

要连接到数据库,您需要一个连接字符串,其中包含app.config文件中的所有信息。一旦连接到数据库,在代码中添加新行甚至更新一行都没有问题。只需构建一个Query,在其中为新行的每一列输入字符串数据!

关于如何构建SQL查询以及如何连接到Microsoft网站上的数据库,有大量的文档,请查看:)

您可以尝试从命令行使用BCP。这对你拥有的权限以及如何访问数据库做了一些假设,但基本上你可以在数据库服务器上调用它(这是一个隐藏的功能),或者你可以在本地复制文件:

https://msdn.microsoft.com/en-us/library/ms162802.aspx

BCP.exe . .in -S -U -c -t

-c is "character format"-t is字段结束符- TAB

留空如果是可信连接,可以用-T替换-U和-P。

一些建议:这些事情总是通过导入到一个阶段表,做任何你需要的更改,然后让一个SQL函数处理转移到生产表来更好地处理。这样,您就可以确保不会意外地丢失数据。

我建议在这种情况下使用列表和数据表。与数组相比,列表的使用是干净的,使用数据表对数据库进行操作也是如此。你可以参考这篇关于stackoverflow的文章,从文本文件中检索数据到数据表中。这篇文章也可以帮助

希望这对你有帮助。