我正在Windows Store应用程序上制作飞行数据应用程序。该应用程序只会跟踪从&抵达巴基斯坦。
我通过JSON从
获取数据并将其保存到SQLite数据库。
这是我获取数据的功能
p.s:声明并分配了连接字符串中使用的所有变量,但由于它们无关紧要,我没有显示它们。
public async void getdata()
{
var dbpath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "flight_record.sqlite");
for (int hour = 0; hour < 24; hour++)
{
HttpClient web = new HttpClient();
var response = await web.GetStringAsync("https://api.flightstats.com/flex/flightstatus/rest/v2/json/airport/status/KHI/arr/" + year + "/" + Month + "/" + today + "/" + hour + "?appId=" + appId + "&appKey=" + appKey + "&utc=false&numHours=1&maxFlights=10");
jsondata1 data1 = JsonConvert.DeserializeObject<jsondata1>(response);
for (int i = 0; i < data1.flightStatuses.Length; i++)
{
int f_ID = Convert.ToInt32(data1.flightStatuses[i].flightId);
string l_time = data1.flightStatuses[i].arrivalDate.dateLocal.TimeOfDay.ToString();
string year1 = data1.flightStatuses[i].arrivalDate.dateLocal.Year.ToString();
string month1 = data1.flightStatuses[i].arrivalDate.dateLocal.Month.ToString();
string day1 = data1.flightStatuses[i].arrivalDate.dateLocal.Day.ToString();
string departureAirport1 = data1.flightStatuses[i].departureAirportFsCode.ToString();
string arrivalAirport1 = data1.flightStatuses[i].arrivalAirportFsCode.ToString();
string stats = data1.flightStatuses[i].status.ToString();
string FsCode = data1.flightStatuses[i].carrierFsCode.ToString();
string flightNumber1 = data1.flightStatuses[i].flightNumber.ToString();
//here arival_data is my sqlite database table
using (var db = new SQLite.SQLiteConnection(dbpath))
{
db.Execute("Insert into arrival_data (flightID, time, year, month, day, departureAirport, arrivalAirport, status, airline, carrierFsCode, flightNumber) values ('" + f_ID + "', '" + l_time + "', '" + year1 + "', '" + month1 + "', '" + day1 +
"', '" + departureAirport1 + "', '" + arrivalAirport1 + "', '" + stats + "', '" + airline1 +
"', '" + FsCode + "', '" + flightNumber1 + "')");
}
}
}
}
我的请求查询每小时仅支持1个查询, 所以我做了一个将运行23次的循环。
每小时航班的数量都不同,所以我在第二个循环中使用了data1.flightStatuses.Length。
之后我将数据插入表中。
当我运行应用程序时,我得到以下异常
我做了调试,而不是将数据插入数据库,我在列表框中显示它,发现这是结果
如果查看结果,则时间不在递增顺序中。因此我得到了例外!
那么我如何组织数据以便时间增加顺序,还是有另一种方式?
答案 0 :(得分:0)
可能有多种原因,但插入数据的顺序不是其中之一。
让我们仔细看看您的样本数据,尤其是第一和第二。第4行,它们是重复的!这让我觉得违反了一个独特的约束条件。
首先要看的是桌面上的主键。是flightID
吗?
您需要考虑对同一航班的多行要执行的操作。您可能希望研究一种在数据已经存在时有效更新数据的方法,或者如果数据不存在则进行插入,也称为UPSERT,请参阅Q&amp; A here。