DataTable的第一个条目填充整个访问数据库

时间:2017-12-17 11:19:58

标签: c# ms-access

我已经将Excel文件读取到DataTable,但只有第一行填充了整个MS Access数据库。我已确认DataTable和Excel文件中的数据是相同的。我的代码如下所示:

using (OleDbConnection myCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + outFilePath + ";Extended Properties=dBase IV"))
{
    OleDbCommand cmd = new OleDbCommand();

    string line = "001";
    for (int n = 0; n < dt.Rows.Count; ++n)
    {

        if (String.IsNullOrEmpty(dt.Rows[n].Field<string>(0))) break;
        cmd.CommandText = "INSERT INTO " + FileName +
            "([JNL],[LINE],[TYPE],[DRACC],[CRACC],[EXPDRACC],[EXPCRACC]," +
            "[DOCDATE],[REF],[DRAMT],[CRAMT]) VALUES (?,?,?,?,?,?,?,?,?,?,?)";

        string inacc = dt.Rows[n].Field<string>(0);                
        string justNumbers = new String(inacc.Where(Char.IsDigit).ToArray());
        string acc = String.Format("{0:##-######-#}", justNumbers);
        string jnl = JNL;
        string Ref = REF;
        string type = TYPE;
        int dramt = 0;
        int cramt = 0;
        if (type == "50") dramt = Convert.ToInt32(100 * dt.Rows[n].Field < double>(2));
        else cramt = Convert.ToInt32(100 * dt.Rows[n].Field < double>(2));

        cmd.Parameters.Add("@JNL", OleDbType.VarChar).Value = jnl;
        cmd.Parameters.Add("@LINE", OleDbType.VarChar).Value = line;
        cmd.Parameters.Add("@TYPE", OleDbType.VarChar).Value = type;
        cmd.Parameters.Add("@DRACC", OleDbType.VarChar).Value = justNumbers;
        cmd.Parameters.Add("@CRACC", OleDbType.VarChar).Value = justNumbers;
        cmd.Parameters.Add("@EXPDRACC", OleDbType.VarChar).Value = acc;
        cmd.Parameters.Add("@EXPCRACC", OleDbType.VarChar).Value = acc;                    
        cmd.Parameters.Add("@DOCDATE", OleDbType.Date).Value = DateTime.Now;
        cmd.Parameters.Add("@REF", OleDbType.VarChar).Value = Ref;
        cmd.Parameters.Add("@DRAMT", OleDbType.Integer).Value = dramt;
        cmd.Parameters.Add("@CRAMT", OleDbType.Integer).Value = cramt;


        cmd.CommandType = CommandType.Text;
        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();
    }
}

如何解决此类问题?

1 个答案:

答案 0 :(得分:0)

您必须从命令中删除参数。您正在为其添加更多参数。使用

cmd.Parameters.Clear(); 

作为for声明的第一行。

添加第一组参数并重复使用相同的命令而不清除它们,因此最终得到一个具有n*11(参数定义/循环)的命令。

collection中的第一个匹配用于替换您的命令参数,以便您获得具有相同数据的n条目。