使用foreach将数据写入访问数据库的数据库>>

问题描述 投票:0回答:2

我有一个要写入数据的Access数据库。我在测试过程中成功做到了这一点,但是由于我打算一次从API响应中一次处理多达1万个查询,因此尝试将代码转换为迭代高效地运行。

我尝试过的事情

我能够使用以下命令成功写入我的Access数据库

            using (OleDbConnection myCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Lenovo\\Desktop\\Weather Cruncher\\wcMainDB.accdb"))
            {
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "Insert into stations_NOAA " +
                    "([stationID],[stationName],[stationMinDate],[stationMaxDate],[stationDataCoverage]," +
                    "[stationLatitude],[stationLongitude],[stationElevation],[stationElevationUnit])" +
                    "values (?,?,?,?,?,?,?,?,?)";
                cmd.Parameters.AddWithValue("@stationID", "1000"); // Short Text data type
                cmd.Parameters.AddWithValue("@stationName", "2000"); // Short Text data type
                cmd.Parameters.AddWithValue("@stationMinDate", "3000"); // Short Text data type
                cmd.Parameters.AddWithValue("@stationMaxDate", "4000"); // Short Text data type
                cmd.Parameters.AddWithValue("@stationDataCoverage", 5000); // Number data type
                cmd.Parameters.AddWithValue("@stationLatitude", 6000); // Number data type
                cmd.Parameters.AddWithValue("@stationLongitude", 7000); // Number data type
                cmd.Parameters.AddWithValue("@stationElevation", 8000); // Number data type
                cmd.Parameters.AddWithValue("@stationElevationUnit", "9000"); // Short Text data type
                cmd.Connection = myCon;
                myCon.Open();
                cmd.ExecuteNonQuery();
            }

enter image description here我能够将API的响应写到控制台:

                foreach (Station loc in noaa.results)
                {
                    Console.WriteLine(loc.id);
                    Console.WriteLine(loc.name);
                    Console.WriteLine(loc.mindate);
                    Console.WriteLine(loc.maxdate);
                    Console.WriteLine(loc.datacoverage);
                    Console.WriteLine(loc.latitude);
                    Console.WriteLine(loc.longitude);
                    Console.WriteLine(loc.elevation);
                    Console.WriteLine(loc.elevationUnit);
                    Console.WriteLine();
                }
                /* Output
                    GHCND:CA001165793
                    100 MILE HOUSE 6 NE, CA
                    1987-06-01
                    2019-11-09
                    1
                    51.6833
                    -121.2167
                    928
                    METERS

                    GHCND:CA001165791
                    100 MILE HOUSE, CA
                    1970-05-01
                    1999-11-30
                    0.9993
                    51.65
                    -121.3
                    1059
                    METERS
                */

我的实际问题

在确认了过程之后,我尝试使用以下命令迭代地编写我的API响应,该响应不起作用并且没有引发任何错误:

            using (OleDbConnection myCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Lenovo\\Desktop\\Weather Cruncher\\wcMainDB.accdb"))
            {
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "Insert into stations_NOAA " +
                    "([stationID],[stationName],[stationMinDate],[stationMaxDate],[stationDataCoverage]," +
                    "[stationLatitude],[stationLongitude],[stationElevation],[stationElevationUnit])" +
                    "values (?,?,?,?,?,?,?,?,?)";
                cmd.Connection = myCon;
                myCon.Open();

                // Populate Datagrid
                foreach (Station loc in noaa.results)
                {
                    cmd.Parameters.AddWithValue("@stationID", loc.id); // Short Text data type
                    cmd.Parameters.AddWithValue("@stationName", loc.name); // Short Text data type
                    cmd.Parameters.AddWithValue("@stationMinDate", loc.mindate); // Short Text data type
                    cmd.Parameters.AddWithValue("@stationMaxDate", loc.maxdate); // Short Text data type
                    cmd.Parameters.AddWithValue("@stationDataCoverage", loc.datacoverage); // Number data type
                    cmd.Parameters.AddWithValue("@stationLatitude", loc.latitude); // Number data type
                    cmd.Parameters.AddWithValue("@stationLongitude", loc.longitude); // Number data type
                    cmd.Parameters.AddWithValue("@stationElevation", loc.elevation); // Number data type
                    cmd.Parameters.AddWithValue("@stationElevationUnit", loc.elevationUnit); // Short Text data type

                }
            }

具有断点,我能够看到它遍历上面的过程,但是没有发现任何数据添加到Access数据库中。我的查询出了点问题-怎么办?

我有一个要写入数据的Access数据库。我在测试过程中成功完成了此操作,但是由于我打算处理〜...

c# oledb
2个回答
0
投票

最后一个示例中每个循环的内部不会显示您在设置参数后调用cmd.excecutenonquery()


0
投票
   using (OleDbConnection myCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Lenovo\\Desktop\\Weather Cruncher\\wcMainDB.accdb"))
        {
            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandText = "Insert into stations_NOAA " +
                "([stationID],[stationName],[stationMinDate],[stationMaxDate],[stationDataCoverage]," +
                "[stationLatitude],[stationLongitude],[stationElevation],[stationElevationUnit])" +
                "values (?,?,?,?,?,?,?,?,?)";
            cmd.Connection = myCon;
            myCon.Open();

            // Populate Datagrid
            foreach (Station loc in noaa.results)
            {
                cmd.Parameters.AddWithValue("@stationID", loc.id); // Short Text data type
                cmd.Parameters.AddWithValue("@stationName", loc.name); // Short Text data type
                cmd.Parameters.AddWithValue("@stationMinDate", loc.mindate); // Short Text data type
                cmd.Parameters.AddWithValue("@stationMaxDate", loc.maxdate); // Short Text data type
                cmd.Parameters.AddWithValue("@stationDataCoverage", loc.datacoverage); // Number data type
                cmd.Parameters.AddWithValue("@stationLatitude", loc.latitude); // Number data type
                cmd.Parameters.AddWithValue("@stationLongitude", loc.longitude); // Number data type
                cmd.Parameters.AddWithValue("@stationElevation", loc.elevation); // Number data type
                cmd.Parameters.AddWithValue("@stationElevationUnit", loc.elevationUnit); // Short Text data type
                cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.