将文本文件数据插入到特定列的SQL Server数据库表中

时间:2018-07-06 04:53:48

标签: c# asp.net sql-server

我已附上我的代码,其中我尝试读取包含许多记录的.txt文件。

我需要在特定列的SQL Server数据库表中插入相同的文本文件数据。这是我通过引用某些地方编写的代码。

protected void BtnUpload_Click(object sender, EventArgs e)
{
    FileUpload(x);
}

private void FileUpload(List<string> x)
{       
    SqlConnection con = new SqlConnection(conStr);
    SqlCommand cmd = new SqlCommand();

    string fileName = Path.Combine(@"C:\Users\user\Desktop\SBS", FileUpload1.FileName);        

    if(FileUpload1.HasFile)
    {
        try
        {
            con.Open();
            List<string> x;

            for (int i = 0; i <= x.Count - 9; i += 9)
            {
                SqlCommand myCommand = new SqlCommand("INSERT INTO SBSFile (SBSBranchCode, BranchName, FinYear, BrChallanNo, TransDate, MajorHead, ReceiptPayment, Amount, PlanNonPlan) " +
                           string.Format("Values('{0}', '{1}',  '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}')", x[i], x[i + 1], x[i + 2], x[i + 3], x[i + 4], x[i + 5], x[i + 6], x[i + 7], x[i + 8], x[i + 9]), con);
                myCommand.ExecuteNonQuery();
         }
         catch (Exception ex)
         {
         }
     }
 }

我的文件示例:

  

1 | abc | | bcd | | 101 |

此处|表示列的分隔符,是的,应将每行插入到特定列可用的表中

有人可以帮助我将文件数据插入SQL Server表吗?

请帮助我解决问题

3 个答案:

答案 0 :(得分:1)

我根本不会使用任何程序...我会使用SQL Server中的“导入”功能来导入以管道分隔的文件。例如How to import pipe delimited text file data to SQLServer table

答案 1 :(得分:0)

这是一个工作代码示例,该代码将从文本文件中读取数据,其中该数据用|分隔。如果使用“全有或全无”原则失败,则将在单个事务中执行多个插入语句。

[TestMethod]
public void TestInsertDataFromFile()
{
    String fileName = @"D:\SampleData.txt";
    String connectionString = @"Server=MyTestDBServer; Database=TestingDatabase; Trusted_Connection=True;";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();

        using (SqlTransaction transaction = conn.BeginTransaction())
        {
            String insertCommand = @"INSERT INTO SBSFile (SBSBranchCode, BranchName, FinYear, BrChallanNo, TransDate, MajorHead, ReceiptPayment, Amount, PlanNonPlan) ";
            insertCommand += @"VALUES (@sbsBranchCode, @branchName, @finYear, @brChallanNo, @transDate, @majorHead, @receiptPayment, @amount, @planNonPlan)";

            String[] fileContent = File.ReadAllLines(fileName);

            using (SqlCommand command = conn.CreateCommand())
            {
                command.CommandText = insertCommand;
                command.CommandType = CommandType.Text;
                command.Transaction = transaction;

                foreach (String dataLine in fileContent)
                {
                    String[] columns = dataLine.Split('|');
                    command.Parameters.Clear();

                    command.Parameters.Add("sbsBranchCode", SqlDbType.VarChar).Value = columns[0];
                    command.Parameters.Add("branchName", SqlDbType.VarChar).Value = columns[1];
                    command.Parameters.Add("finYear", SqlDbType.VarChar).Value = columns[2];
                    command.Parameters.Add("brChallanNo", SqlDbType.VarChar).Value = columns[3];
                    command.Parameters.Add("transDate", SqlDbType.VarChar).Value = columns[4];
                    command.Parameters.Add("majorHead", SqlDbType.VarChar).Value = columns[5];
                    command.Parameters.Add("receiptPayment", SqlDbType.VarChar).Value = columns[6];
                    command.Parameters.Add("amount", SqlDbType.VarChar).Value = columns[7];
                    command.Parameters.Add("planNonPlan", SqlDbType.VarChar).Value = columns[8];

                    command.ExecuteNonQuery();
                }
            }

            transaction.Commit();
        }
    }
}

要注意的重要事项

  1. 永远不要有空的catch {}处理程序,因为您永远不会知道是否存在问题。
  2. 使用外部指定的值与数据库对话时,始终使用参数来防止SQL注入攻击。
  3. 如果您要从一个来源进行多次插入,请使用事务。它将使恢复成为可能,而无需手动取消选择数据。
  4. 在可能的情况下(当类实现 IDisposable 时)使用using(...)块来确保释放资源,而不是阻塞/锁定。

答案 2 :(得分:-1)

使用此代码:

        SqlConnection con = new SqlConnection(conStr);
        SqlCommand cmd = new SqlCommand();

        string fileName = Path.Combine(@"C:\Users\user\Desktop\SBS", FileUpload1.FileName);

        if (FileUpload1.HasFile)
        {
            var lines = File.ReadAllLines(fileName);
            try
            {
                con.Open();

                foreach (var line in lines)
                {
                    var columns = line.Split('|');
                    SqlCommand myCommand = new SqlCommand("INSERT INTO SBSFile (SBSBranchCode, BranchName, FinYear, BrChallanNo, TransDate, MajorHead, ReceiptPayment, Amount, PlanNonPlan) " +
                               $"Values('{columns[0]}', '{columns[1]}','{columns[2]}','{columns[3]}','{columns[4]}','{columns[5]}','{columns[6]}','{columns[7]}','{columns[8]}''{columns[9]}')");
                    myCommand.ExecuteNonQuery();
                }
                con.Close();
            }
            catch (Exception ex)
            {
            }
        }