2016-09-22 113 views
0

我有这样的项目:如何导入文本文件并将数据保存到数据库中?

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

的文本文件由制表四个分字段以及数据库。

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

回答

2

让我们来解决在这个时间一步...

获取数据:


获取文本文件转换成字符串变量。

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. 

现在,你需要像一个循环的东西要经过这些条目中的每一个,并将其插入到数据库中,这意味着我们现在需要我们的数据库连接...

连接到数据库


代码项目(另一个有用的网站)有关于makin的 this教程g来自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());} 
    } 

请注意,您可能很可能必须更改/编辑我的循环;它背后的逻辑是实现4乘以所以你可以阅读你的每一列,所以列数(条目数)必须少于4,所以你不会得到一个索引越界(在记事本I中输入这一切我不确定我是否拥有所有的逻辑,但是如果错误是您必须解决的问题,我们不会为人们编写代码)。

请注意!

像string.format()这样的东西让你打开一个SQL注入,你真的应该查询SQL参数,但这将完成工作。以下是我认为一定要读一些帖子:

Preventing SQL Injections in C#

What is an SQL Injection (W3-schools)

+1

谢谢你很大的帮助。 只是一件事: for循环必须是“我<= x.Count”或它永远不会保存最后一个条目,花了我一段时间来解决这个问题。 此外,首先连接“失败”。这是连接,但没有保存任何东西。我用“服务器=(本地);” +“数据库=名称;” +“Trusted_Connection = yes;”与所有的大写和分号。另外,没有用户或角色,您发送给我的博客表示在使用可信连接时没有必要,这是正确的。 再次感谢您以正确的方式带领我。 –

0

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

0

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

有关于如何建立SQL查询,以及如何连接到Microsoft网站上的数据库一吨的文档,给它看看:)

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函数处理传输到生产表,可以更好地处理这些事情。这样你可以确保你不会意外地吹走数据。

0

我会建议让我们如果列表和数据在这种情况下。列表的使用与数组相比是干净的,同样适用于使用数据表的数据库操作。 您可以参考this在stackoverflow上发布数据从文本文件到数据表。 这post也有助于

希望这有助于..

相关问题