尝试从XML文件向MS Access数据库添加值

时间:2017-06-18 09:34:09

标签: c# xml database ms-access oledbconnection

我正在尝试创建一个程序,它可以读取5个XML文件并将数据存储在Microsoft Access数据库中。

这是代码:https://codepaste.net/ve4bkb

然而,当我运行程序时,没有任何东西被添加到数据库中。

当我关闭Form1时,弹出错误消息,然后我得到:

  

抛出异常:System.Data.dll中的'System.Data.OleDb.OleDbException'   在调试框中。

我认为Visual Studio正在连接到数据库,就像数据连接中的服务器资源管理器一样,我可以看到数据库中的表格包含所有标题。

我似乎遇到问题的代码部分如下:

myScript.js

1 个答案:

答案 0 :(得分:0)

时间和日期是保留关键字。将它们写在方括号之间

String strSQL = @"Insert into UAVData
                 ([Day],[Time],Latitude,Longitude,
                  Altitude,Temperature,Windspeed) 
                  values(@day,@time, @lat,@long, @alt, @temp, @wind)";
using(OleDbConnection con = new OleDbConnection(.....))
using(OleDbCommand CmdSql = new OleDbCommand(cmdText, con))
{
    con.Open();
    CmdSql.Parameters.Add("@Day", OleDbType.Integer);
    CmdSql.Parameters.Add("@Time", OleDbType.BigInt);
    CmdSql.Parameters.Add("@Lat", OleDbType.Double)
    CmdSql.Parameters.Add("@Long", OleDbType.Double);
    CmdSql.Parameters.Add("@Alt", OleDbType.Double);
    CmdSql.Parameters.Add("@Temp", OleDbType.Double);
    CmdSql.Parameters.Add("@Wind", OleDbType.Double);

    for (int j = 0; j < timeList.Count; j++)
    {
        CmdSql.Parameters["@Day"].Value = 1
        CmdSql.Parameters["@Time"].Value = Convert.ToInt64(timeList[j].InnerText);
        CmdSql.Parameters["@Lat"].Value = Convert.ToDouble(latList[j].InnerText
        CmdSql.Parameters["@Long"].Value = Convert.ToDouble(longList[j].InnerText);
        CmdSql.Parameters["@Alt"].Value = Convert.ToDouble(altList[j].InnerText);
        CmdSql.Parameters["@Temp"].Value = Convert.ToDouble(tempList[j].InnerText);
        CmdSql.Parameters["@Wind"].Value = Convert.ToDouble(windList[j].InnerText);
        CmdSql.ExecuteNonQuery();
    }
}

另请注意,我已删除了try / catch块以使异常可见。在生产场景中,您应该确保正确处理它并显示适当的错误消息,并且还要清理XML中的输入,以便在尝试插入新记录之前绝对确保所有这些转换成功。此代码也会尝试插入许多记录,您可能需要使用Transaction对象来保证all / none规则。

对于线程问题,我建议您查看此答案Multiple MS ACCESS connection with threading (oledb)