【问题标题】:Upload CSV File In C# [duplicate]在 C# 中上传 CSV 文件 [重复]
【发布时间】: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();
}

【问题讨论】:

    标签: c# sql oracle


    【解决方案1】:

    几个问题:

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

    代码:

            ...
            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 中没有使用 @ 作为参数。非常感谢大家
      猜你喜欢
      • 2020-03-11
      • 1970-01-01
      • 2021-09-17
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多