在 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 文件,它还包含重复的行