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



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

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

但是,当我运行该程序时,不会将任何内容添加到数据库中。

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

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

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

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

for (int j = 0; j < timeList.Count; j++)
{
    OleDbConnection con = new
    OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersKyleDesktopUAVbrookbrookUAVUAVReadings.mdb;Persist Security Info=False");
    String strSQL = "Insert into UAVData(Day,Time,Latitude,Longitude,Altitude,Temperature,Windspeed) values(1,@timeList[j].InnerText, @latList[j].InnerText, @longList[j].InnerText, @altList[j].InnerText, @tempList[j].InnerText, @windList[j].InnerText)";
    OleDbCommand CmdSql = new OleDbCommand(strSQL, con);
    CmdSql.CommandType = CommandType.Text;
    CmdSql.Parameters.AddWithValue("@Day", 1);
    CmdSql.Parameters.AddWithValue("@Time", Convert.ToInt64(timeList[j].InnerText));
    CmdSql.Parameters.AddWithValue("@Latitude", Convert.ToDouble(latList[j].InnerText));
    CmdSql.Parameters.AddWithValue("@Longitude", Convert.ToDouble(longList[j].InnerText));
    CmdSql.Parameters.AddWithValue("@Altitude", Convert.ToDouble(altList[j].InnerText));
    CmdSql.Parameters.AddWithValue("@Temperature", Convert.ToDouble(tempList[j].InnerText));
    CmdSql.Parameters.AddWithValue("@Windspeed", Convert.ToDouble(windList[j].InnerText));

    con.Open();
    try
    {
        CmdSql.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        ex.Message.ToString();
    }
    finally
    {
        con.Close();
        CmdSql.Dispose();
    }
}

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

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 对象来保证全部/无规则。

对于线程问题,我建议看看这个答案 带线程的多MS ACCESS连接(oledb(

相关内容

  • 没有找到相关文章

最新更新