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

时间:2016-09-22 01:42:07

标签: c# sql sql-server

我有这个项目:

  1. 导入.txt文件
  2. 连接到SQL Server数据库
  3. 将所有数据传输到数据库
  4. 文本文件由四个字段中的选项卡分隔,以便作为数据库。

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

5 个答案:

答案 0 :(得分:3)

让我们一步一步解决这个问题......

获取数据

<小时/> 将文本文件转换为字符串变量。

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

有关此here

的更多信息

现在我们将它放在一个字符串中,我们可以解析

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

可以找到更多用于拆分新行的选项here

现在,您需要将每个元素拆分为自己的行;你说你有选项卡分隔这很好(类似逗号分隔(CSV)的东西现代比较常见,但标签会起作用!)......为此我们可以这样做:

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

现在,你需要像循环这样的东西来浏览每个条目并将其插入数据库,这意味着我们现在需要我们的数据库连接...

连接数据库

<小时/> 代码项目(另一个有用的站点)有关于从C#建立SQL连接的this教程;下面是代码摘要(请阅读文章,此网站不是为了让人们代表您编写/查找代码!)

确保您使用的是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,这样你就可以阅读每一列,所以列数(条目数)必须少4,这样你就不会得到一个超出范围的索引(输入全部为记事本我不确定我是否掌握了所有逻辑,但是,如果它是错误的,那么你必须解决这个问题,我们不能只为人们编写代码。

请注意!

像string.format()之类的东西让你打开 SQL注入,你真的应该查找SQL参数,但这将完成工作。以下是我认为必须阅读的一些帖子:

Preventing SQL Injections in C#

What is an SQL Injection (W3-schools)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

BCP.exe ..在-S -U -P -c -t

-c是“字符格式” -t是字段终止符 - 为TAB留空:

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

一些建议:通过导入到临时表,进行所需的任何更改,然后让SQL函数处理到生产表的传输,可以更好地处理这些事情。通过这种方式,您可以确保不会意外地吹走数据。

答案 4 :(得分:0)

我建议在这种情况下使用列表和数据表。与数组相比,列表的使用是干净的,同样适用于使用数据表对数据库的操作。 您可以在stackoverflow上引用this帖子以将文本文件中的数据检索到数据表中。 这post也可以提供帮助

希望这会有所帮助..