好了,所以,我目前正在运行此代码从一种普遍的数据库移到一组数据到Access数据库为什么第一个阅读器运行第二个阅读器读取()运行得更快,然后在自己的阅读器上运行呢?
public List<HBPData> LoadData()
{
loadConnect(); //<-- get's the Pervasive/Access string from a text file
List<HBPData> listofhbpdata1 = new List<HBPData>();
List<HBPData> listofhbpdata2 = new List<HBPData>();
PsqlConnection myConnection = new PsqlConnection();
myConnection.ConnectionString = PervasiveString;
myConnection.Open();
PsqlCommand myCommand = new PsqlCommand("Select NUMBER, CUST_NAME, PO_NO, REQD_DATE, PO_NO, CUST_PO_NO, ORD_DATE, STATUS FROM SALES_ORDER_HEADER WHERE ORD_DATE > 20120220 Order By ORD_DATE desc", myConnection);
PsqlDataReader myreader = null;
myreader = myCommand.ExecuteReader();
while (myreader.Read())
{
HBPData DataEntity = new HBPData();
DataEntity.NUMBER = (myreader["NUMBER"].ToString());
DataEntity.CUST_NO = (myreader["CUST_NAME"].ToString()).Replace("'","");
DataEntity.PO_NO = (myreader["PO_NO"].ToString());
DataEntity.RequiredDateTime = (myreader["REQD_DATE"].ToString());
DataEntity.Tag = (myreader["PO_NO"].ToString());
DataEntity.Shape = (myreader["CUST_PO_NO"].ToString());
DataEntity.ExpectedCompletion = myreader["ORD_DATE"].ToString().Substring(0, 4) + "/" + myreader["ORD_DATE"].ToString().Substring(4, 2) + "/" + myreader["ORD_DATE"].ToString().Substring(6, 2);
DataEntity.MostRecentStatus = (myreader["STATUS"].ToString());
listofhbpdata1.Add(DataEntity);
}
PsqlCommand myCommand1 = new PsqlCommand("Select NUMBER, RECNO, CODE, ORDD_DESCRIPTION, BVORDQTY FROM SALES_ORDER_DETAIL WHERE BVRVADDDATE > 20120220 AND (PROD_CODE = \'MET\' OR PROD_CODE = \'MDT\') Order By NUMBER desc", myConnection);
PsqlDataReader myreader1 = null;
myreader1 = myCommand1.ExecuteReader();
while (myreader.Read())
{
HBPData DataEntity = new HBPData();
DataEntity.NUMBER = (myreader1["NUMBER"].ToString());
DataEntity.RECNO = (myreader1["RECNO"].ToString());
DataEntity.CODE = (myreader1["CODE"].ToString());
DataEntity.DESCRIPTION = (myreader1["ORDD_DESCRIPTION"].ToString());
DataEntity.Quantity = (myreader1["BVORDQTY"].ToString());
listofhbpdata2.Add(DataEntity);
}
myConnection.Close();
myreader1.Close();
myreader.Close();
System.Data.OleDb.OleDbConnection myAccessConnection = new System.Data.OleDb.OleDbConnection();
myAccessConnection.ConnectionString = AccessString;
myAccessConnection.Open();
System.Data.OleDb.OleDbCommand myAccessCommand3 = new System.Data.OleDb.OleDbCommand("delete from AllOrders", myAccessConnection);
myAccessCommand3.ExecuteNonQuery();
for (int i = 0; i < listofhbpdata2.Count(); ++i)
{
System.Data.OleDb.OleDbCommand myAccessCommand2 = new System.Data.OleDb.OleDbCommand("" +
"Insert into AllOrders VALUES('" +
listofhbpdata2[i].NUMBER + "'" + ",'" + listofhbpdata2[i].RECNO.ToString() + "'" +
",'" + listofhbpdata2[i].CODE + "','" + listofhbpdata2[i].DESCRIPTION.Replace("\'", "F") + "'" +
",'" + listofhbpdata2[i].Quantity + "')", myAccessConnection);
myAccessCommand2.ExecuteNonQuery();
}
myAccessConnection.Close();
return listofhbpdata1;
}
现在,.如果你仔细看,我打错了第二个阅读器,它应该阅读,而(myreader1.read())...我不小心把myreader.read()
把myreader.read()让我惊讶运行成功... 这是一种什么样的自爆...... 我将它改为“myreader1.read()” ,代码的运行时间几乎是双倍......, 反正,检查数据库,所有的数据在那里......
所以,使用常识,我觉得很好,它可能只是每次运行第一个阅读器都会执行两套代码,
但那么如何来所有的数据呢?
Sales_Order_Header中的字段显着少于Sales_Order_Detail,如果它正在为第一个读取器执行读取操作,是不是应该在标题表的末尾完成,然后停止?那么为什么所有数据都在那里?
无论哪种方式,这段代码的运行时间相对较慢,有没有人有任何改善我的代码的建议?
编辑:只是为了表明第二读卡器未INFACT返回false:
,你可以看到,调试器已加强了读者的内部
您是否尝试过在StackExchange家网站的代码审查懒得使用DAO? – GregC 2012-03-26 15:29:17