C# 使用C将文本文件导入SQL Server数据库#

C# 使用C将文本文件导入SQL Server数据库#,c#,asp.net,C#,Asp.net,我正在尝试将文本文件导入sql server数据库,导入工作正常,但问题是文本文件中的所有列都被插入到一列中。 我需要文本文件中的列来映射sql表中的列。 这是我的密码 Console.WriteLine(s); string fileName = s.ToString(); string fullPath = path + fileName.ToString(); DataTable dt = new DataTable();

我正在尝试将文本文件导入sql server数据库,导入工作正常,但问题是文本文件中的所有列都被插入到一列中。

我需要文本文件中的列来映射sql表中的列。 这是我的密码

Console.WriteLine(s);
         string fileName = s.ToString();
         string fullPath = path + fileName.ToString();

         DataTable dt = new DataTable();
         dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Environment", typeof(string)),
            new DataColumn("Job_Name", typeof(string)),
            new DataColumn("Occurs",typeof(string)) });


         string csvData = File.ReadAllText(fullPath);
         foreach (string row in csvData.Split('\n'))
         {
           if (!string.IsNullOrEmpty(row))
           {
             dt.Rows.Add();
             int i = 0;
             foreach (string cell in row.Split(','))
             {
               dt.Rows[dt.Rows.Count - 1][i] = cell;
               i++;
             }
           }
         }

         string consString = ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
         using (SqlConnection con = new SqlConnection(consString))
         {
           using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
           {
             //Set the database table name
             sqlBulkCopy.DestinationTableName = "[dbo].[test2]";
             con.Open();
             sqlBulkCopy.WriteToServer(dt);
             con.Close();
           }
         }

当数据以制表符分隔时,您正在以逗号分隔行。而是这样做:

row.Split('\t')
另外,不要在
\n
上拆分整个文件,请使用
文件.ReadAllLines
,例如:

 foreach (string row in File.ReadAllLines(fullPath))
 {
   if (!string.IsNullOrEmpty(row))
   {
     dt.Rows.Add();
     int i = 0;
     foreach (string cell in row.Split('\t'))
     {
       dt.Rows[dt.Rows.Count - 1][i] = cell;
       i++;
     }
   }
 }
在c#函数下面,将逗号分隔的文件导入c#数据表。将数据输入dataTable后,您可以应用所需的方法(批量插入/逐行插入)来接收数据库:

 public static DataTable ImportDataFromCSVFile(string filePath)
    {
        DataTable dataTable = new DataTable();
        try
        {
            using (StreamReader readFile = new StreamReader(filePath))
            {
                string line;
                StringBuilder sb = new StringBuilder();
                string[] row;
                int counter = 0;
                int length = 0;
                while ((line = readFile.ReadLine()) != null)
                {
                    row = line.Split(',');

                    if (counter == 0)
                    {
                        length = row.Length;
                        DataRow dr1 = dataTable.NewRow();
                        for (int i = 0; i < length; i++)
                        {
                            try
                            {
                                //dataTable.Columns.Add("Col_" + i.ToString());
                                dataTable.Columns.Add(Convert.ToString(row[i]));

                            }
                            catch (Exception ex)
                            {

                            }
                        }
                        //  dataTable.Rows.Add(dr1);
                    }
                    else
                    {
                        if (row.Length == dataTable.Columns.Count)
                        {
                            DataRow dr = dataTable.NewRow();
                            for (int i = 0; i < length; i++)
                            {
                                if (row[i].ToString().Contains('"'))
                                {
                                    row[i] = row[i].Replace('"', ' ');
                                }
                                dr[i] = Convert.ToString(row[i]);
                            }

                            dataTable.Rows.Add(dr);

                        }
                        else
                        {

                        }
                    }

                    counter++;
                }
            }
        }
        catch (Exception ex)
        {

        }

        return dataTable;
    }
公共静态数据表ImportDataFromCSVFile(字符串文件路径)
{
DataTable=新的DataTable();
尝试
{
使用(StreamReader readFile=newstreamreader(filePath))
{
弦线;
StringBuilder sb=新的StringBuilder();
字符串[]行;
int计数器=0;
整数长度=0;
而((line=readFile.ReadLine())!=null)
{
行=行。拆分(',');
如果(计数器==0)
{
长度=行长度;
DataRow dr1=dataTable.NewRow();
for(int i=0;i
那么row.Split(“,”)返回的究竟是什么呢?迭代实际上是在第一个循环中发生的吗?我猜您正在使用的行终止符没有被正确解析,因此您可以将整个文件作为一行读取,然后添加它。我建议您使用
file.ReadAllLines
,而不是在
\n
上拆分。另外,您确定您的数据是逗号分隔的吗?可能是制表符还是空格?如果是制表符分隔的,为什么要用逗号?执行此操作:
row.Split('\t')
。当您已经知道数据没有用逗号标记时,为什么会认为使用逗号进行拆分会有效?不管你是不是新手,这都没有逻辑意义。如果你用一张纸做这件事,同样的逻辑也适用。