不调试没有问题,单步调试反而会抛出异常
public ContractInfo GetContractByNo(string contractNo)
{
ContractInfo contractInfo = new ContractInfo();
OleDbCommand select = new OleDbCommand();
string cmd = "SELECT contracts.*, customers.customerName FROM contracts, customers "
+ "WHERE contracts.customerNo = customers.customerNo and contracts.contractNo = ' " + contractNo + " '; ";
try
{
select.CommandText=cmd;
select.Connection=conn;
conn.Open();
OleDbDataReader DataReader=select.ExecuteReader();
if(DataReader.Read())
{
contractInfo.SetContractNo(DataReader.GetString(0));
contractInfo.SetContractName(DataReader.GetString(2));
contractInfo.SetCustomerNo(DataReader.GetString(3));
contractInfo.SetBookDate(Convert.ToDateTime(DataReader[4]));
contractInfo.SetAddress(DataReader.GetString(5));
contractInfo.SetComType(DataReader.GetString(6));
contractInfo.SetPhone(DataReader.GetString(7));
contractInfo.SetFax(DataReader.GetString(8));
contractInfo.SetAccountNo(DataReader.GetString(9));
contractInfo.SetAccountName(DataReader.GetString(10));
contractInfo.SetBank(DataReader.GetString(11));
contractInfo.SetTaxNo(DataReader.GetString(12));
contractInfo.SetCharge(DataReader.GetString(13));
contractInfo.SetSaleType(Convert.ToDouble(DataReader[14]));
contractInfo.SetAmount(Convert.ToDouble(DataReader[15]));
contractInfo.SetPaymentType(DataReader.GetString(16));
contractInfo.SetPaidAmount(Convert.ToDouble(DataReader[17]));
contractInfo.SetNotPaidAmount(Convert.ToDouble(DataReader[18]));
contractInfo.SetContractStatus(Convert.ToDouble(DataReader[19]));
contractInfo.SetNextPayDate(Convert.ToDateTime(DataReader[20]));
contractInfo.SetProfit(Convert.ToDouble(DataReader[21]));
contractInfo.SetCost(Convert.ToDouble(DataReader[22]));
contractInfo.SetProcessor(DataReader.GetString(23));
contractInfo.SetApproval(DataReader.GetString(24));
contractInfo.SetUpdateDate(Convert.ToDateTime(DataReader[25]));
contractInfo.SetUpdateUser(DataReader.GetString(26));
contractInfo.SetCustomerName(DataReader.GetString(27));
}
conn.Close();
}
catch(Exception e)
{
throw e;
}
finally
{
select.Connection.Dispose();
select.Dispose();
conn.Close();
}
return contractInfo;
}
单步调试的时候总是在执行到DataReader=select.ExecuteReader();时候抛出一个异常:ExecuteReader 需要打开的并且可用的连接。该连接的当前状态是 Open, Fetching。真是不明白是怎么回事了!谢谢告知啊~~
------解决方案--------------------select.Connection=conn;
conn.Open();
把这两句对调一下看看
conn.Open();
select.Connection=conn;
------解决方案--------------------public void CreateMyOleDbDataReader(string mySelectQuery,string myConnectionString)
{
OleDbConnection myConnection = new OleDbConnection(myConnectionString);
OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
myConnection.Open();
OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
while(myReader.Read())
{