在 C# 中上传 CSV 文件 [重复]

Posted

技术标签:

【中文标题】在 C# 中上传 CSV 文件 [重复]【英文标题】:Upload CSV File In C# [duplicate] 【发布时间】:2020-01-07 03:58:14 【问题描述】:

当我尝试将我的 csv 文件上传到 C# 中的 Oracle 数据库时遇到问题。错误消息的出现类似于 "ORA-00936: missing expression"。我不知道要修复它。请问这里有没有人可以帮我解决这个问题。

这是我当前的代码;

conn.Open();

foreach(DataRow importRow in importData.Rows)

    OracleCommand cmd = new OracleCommand("INSERT INTO TMCI_PPC_IMPORTDATA_PSI (ITEM, REQUIREMENT, REQ_DATE)" +
                                          "VALUES (@Itm, @Req, @ReqDT)", conn);

    cmd.CommandType = CommandType.Text;

    cmd.Parameters.Add("@Itm", importRow["ITEM"]);
    cmd.Parameters.Add("@Req", importRow["REQUIREMENT"]);
    cmd.Parameters.Add("@ReqDT", importRow["REQ_DATE"]);

    cmd.ExecuteNonQuery();

【问题讨论】:

【参考方案1】:

几个问题:

    Oracle 使用:,而不是@ 作为参数 您应该在循环之前创建参数一次

代码:

        ...
        conn.Open();

        // Oracle uses : not @ for parameters
        string query = 
          @"INSERT INTO TMCI_PPC_IMPORTDATA_PSI (
              ITEM, 
              REQUIREMENT, 
              REQ_DATE)
            VALUES (
              :Itm, 
              :Req, 
              :ReqDT)";

        //DONE: wrap IDisposable into using
        using (OracleCommand cmd = new OracleCommand(query, conn)) 
          //DONE: create parameters once
          //TODO: validate parameters' types
          cmd.Parameters.Add(":Itm", OracleDbType.Varchar2);
          cmd.Parameters.Add(":Req", OracleDbType.Varchar2);
          cmd.Parameters.Add(":ReqDT", OracleDbType.Date);

          foreach(DataRow importRow in importData.Rows)  
            // assign parameters as many as you want
            cmd.Parameters[":Itm"].Value = importRow["ITEM"];
            cmd.Parameters[":Req"].Value = importRow["REQUIREMENT"];
            cmd.Parameters[":ReqDT"].Value = importRow["REQUIREMENT"];

            cmd.ExecuteNonQuery(); 
            
        

【讨论】:

【参考方案2】:

我很确定参数需要有:作为前缀而不是@

OracleCommand cmd = new OracleCommand("INSERT INTO TMCI_PPC_IMPORTDATA_PSI (ITEM, REQUIREMENT, REQ_DATE)" +
                "VALUES (:Itm, :Req, :ReqDT)", conn);

并将您的参数更改为如下所示:

command.Parameters.Add(new OracleParameter("Itm", importRow["ITEM"]);

【讨论】:

非常感谢,真的很管用。我只知道在 oracle 中没有使用 @ 作为参数。非常感谢大家

以上是关于在 C# 中上传 CSV 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 mysql 表中上传大约 10,000,000 条记录的大型 CSV 文件,它还包含重复的行

上传CSV文件如何删除多余的空格[重复]

C#如何从url下载csv文件[重复]

从 CSV 生成 Excel 电子表格(ASP.NET C#)[重复]

C#中的特殊字符打印[重复]

C#:用 CSV 中的单列填充组合框