0

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 ]

ファイル、コードからテーブル スキーマまで、すべてを 2 回および 3 回チェックしましたが、すべて問題ないように見えます。私は何が欠けていますか?

4

1 に答える 1

1

現在のように、コードはタブ(\t)が見つかった場合にのみパラメーターを追加します。各行がタブで終わっていない場合、2番目のパラメーターは追加されません。これはあなたの問題かもしれません。

于 2012-08-28T14:04:27.427 に答える