【发布时间】:2012-08-28 13:58:51
【问题描述】:
我编写了一些基本代码来解析 CSV 文件并在运行时将数据输入数据库。此代码的变体(针对不同的定界符和列)在许多 csv 文件中运行良好,但是由于某种原因,现在此代码给我一个 2 列文件的错误。
using (StreamReader reader = new StreamReader(@"C:\Rawdata\Salesman.csv"))
{
string line;
StringBuilder query = new StringBuilder();
while (!reader.EndOfStream)
{
line = reader.ReadLine();
StringBuilder segment = new StringBuilder();
for (int i = 0, segno = 0; i < line.Length; i++)
{
if (line[i] != '\t')
{
segment.Append(line[i]);
}
else
{
switch (segno)
{
case 0:
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@code", segment.ToString());
break;
case 1:
cmd.Parameters.AddWithValue("@name", segment.ToString());
break;
default:
break;
}
segno++;
segment.Clear();
}
}
delCmd = "INSERT INTO sales_codes (code, name) VALUES (@code, @name)";
cmd.CommandText = delCmd;
cmd.ExecuteNonQuery();
query.Clear();
}
}
抛出的异常是:
SqlCeException - A parameter is missing. [ Parameter ordinal = 1 ]
从文件、代码到表架构,我已经检查了两次和三次,一切看起来都很好。我错过了什么?
【问题讨论】:
-
是否需要在参数之前设置命令文本?
-
另外,您正在
swith/case语句中设置参数。您确定它们是为 CSV 的每一行设置的吗? -
这就是我一开始的想法,但尝试在添加参数之前放置命令文本,但没有任何乐趣 - 而且对于我一直在解析的其他文件,它一直运行良好。还是谢谢。
标签: c# sql parameters sql-server-ce