【发布时间】:2019-12-29 16:42:30
【问题描述】:
我有一个要写入数据的 Access 数据库。我在测试期间成功地这样做了,但是我试图将我的代码转换为迭代且高效地运行,因为我打算一次处理来自 API 响应的多达 10K 查询。
我的尝试
我能够使用以下命令成功写入我的 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();
}
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 数据库中。我的查询出了点问题 - 怎么办?
【问题讨论】: