如何正确比较SQL中的日期?

时间:2016-07-19 07:43:47

标签: c# sql asp.net oracle date

我有以下代码,由于数据类型问题,我无法使其工作。我试过多次调整它,但我不断收到错误,如

  

填充数据集时发生异常:
  错误[07001] [Oracle] [ODBC] [Ora] ORA-01008:并非所有变量都绑定

经典ASP页面:

MyBool = MyProject.MyMethod(Request("ToDate")) //for example:"7/18/2017"

我的班级:

public bool MyMethod(string EndDate)
    {
        MyData data = new MyData();
        return (data.MyMethod(EndDate));
    }
public bool MyMethod(string EndDate)
    {
(...)
CreateCommand("SELECT * FROM MYTABLE WHERE Cast(StartDate as date) <= Cast(@EndDate as date)");
AddInParameter("EndDate", DbType.String, EndDate);

我的表:

STARTDATE [VARCHAR2(10) NULL]

对于在这种情况下应该如何处理数据类型和/或修改SQL命令,我将不胜感激。

这是在AddInParameter()中执行的:

DbParameter parameter = providerFactory.CreateParameter();
parameter.ParameterName = FormatParameterName("EndDate"); 
parameter.DbType = type; //(DbType type = String)
parameter.Value = value; //(Object value = "7/18/2017")
parameter.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter);

1 个答案:

答案 0 :(得分:0)

如果您的StartDate和EndDate列是字符类型,请将其更改为DateTime。字符类型的列(如varchar,nvarchar等)用于字符,datetime类型的列用于DateTime。

将DateTime保存为字符串没有意义。

作为旁注;在C#中的DateTime中没有任何隐式格式。它只是包含一些时间的值。字符串表示形式有格式

如果您想保持列类型不变,您需要做什么,如下所示:EndDate.ToString("MM/dd/yyyy g", CultureInfo.InvariantCulture); // Displays 08/04/0070 A.D.