我有MS Access
数据库有包含以下数据的表。
TradeDate TradeType TicketNo PassengerName
11-Feb-19 SALE 1234 ABC
12-Feb-19 PURCHASE 0345 XYZ
我想使用 TradeType 获取两个日期之间的数据,下面是我的 C# 代码
public static DataTable GetSale(DateTime FromDate, DateTime ToDate, string TradeType)
{
DataTable dt = new DataTable();
OleDbConnection con = new OleDbConnection(Utility.GetConnectionString());
OleDbCommand cmd = new OleDbCommand("SELECT A.AgencyName, T.TradeDate, T.InvoiceNo, T.TicketNo, T.PassengerName, T.FatherName, T.TicketAmount, T.RefundAmount FROM Agencies AS A, Trade AS T WHERE T.Account_ID=A.Account_ID and T.TradeType=@TradeType And T.TradeDate>=@FromDate And T.TradeDate<@ToDate", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@FromDate", FromDate);
cmd.Parameters.AddWithValue("@ToDate", ToDate);
cmd.Parameters.AddWithValue("@TradeType", TradeType);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
con.Open();
da.Fill(dt);
con.Close();
}
在执行我的代码时
条件表达式中的数据类型不匹配。
抛出异常。我究竟做错了什么?
您应该知道的第一件事是OleDbCommand
按定义顺序处理参数,您需要按照它们在查询中出现的顺序定义参数(OLE DB 不支持命名参数)。
其次,使用Add()
而不是AddWithValue()
通过OleDbType
为每个参数指定,您可以在此处查看类型列表。
以下是正确设置的示例:
OleDbConnection con = new OleDbConnection(Utility.GetConnectionString());
OleDbCommand cmd = new OleDbCommand(@"SELECT A.AgencyName, T.TradeDate, T.InvoiceNo, T.TicketNo, T.PassengerName, T.FatherName, T.TicketAmount, T.RefundAmount
FROM Agencies AS A, Trade AS T
WHERE T.Account_ID=A.Account_ID
and T.TradeType = @TradeType And T.TradeDate >= @FromDate And T.TradeDate < @ToDate", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@TradeType", OleDbType.VarWChar).Value = TradeType;
cmd.Parameters.Add("@FromDate", OleDbType.Date).Value = FromDate;
cmd.Parameters.Add("@ToDate", OleDbType.Date).Value = ToDate;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句