Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以欧洲格式在两个日期之间选择_C#_Sql_Sql Server_Date_Between - Fatal编程技术网

C# 以欧洲格式在两个日期之间选择

C# 以欧洲格式在两个日期之间选择,c#,sql,sql-server,date,between,C#,Sql,Sql Server,Date,Between,当我尝试选择2月和3月之间的记录时,以下查询不会返回任何结果 以下是我正在使用的查询: SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM data WHERE CONVERT(VARCHAR(50),data,105) BETWEEN CONVERT(VARCHAR(50),'" + dateTimePicker1.Text + "',105) AND CONVERT(VARCHAR(50),'"+dateTimePicker3.Te

当我尝试选择2月和3月之间的记录时,以下查询不会返回任何结果

以下是我正在使用的查询:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM data WHERE  CONVERT(VARCHAR(50),data,105) BETWEEN  CONVERT(VARCHAR(50),'" + dateTimePicker1.Text + "',105) AND CONVERT(VARCHAR(50),'"+dateTimePicker3.Text+"',105)", conn);
  • data
    是VARCHAR(50)类型,我想将其转换为dd-MM-yyyy格式

    • 您的SQL应该是

       SELECT * FROM data 
       WHERE  CONVERT(datetime, data, 105)  >= CONVERT(datetime, '01-01-2014', 105) 
           AND  CONVERT(datetime, data, 105) <= CONVERT(datetime, '01-31-2014', 105)
      
      从数据中选择*
      其中CONVERT(datetime,data,105)>=CONVERT(datetime,'01-01-2014',105)
      
      和CONVERT(datetime,data,105)我将使用
      DatePicker
      中的
      date
      值,一旦将所有内容转换为
      date
      SQL将不会有比较mm-dd-yyyyy和dd-mm-yyyy的问题

      SELECT * 
      FROM MyTable
      WHERE CONVERT(DATE,MyStringDate,105) >= dateTimePicker1.Value.Date
      AND CONVERT(DATE,MyStringDate,105) <= dateTimePicker.Value.Date
      
      选择*
      从MyTable
      其中CONVERT(DATE,MyStringDate,105)>=dateTimePicker1.Value.DATE
      
      和CONVERT(DATE,MyStringDate,105)您正在进行太多的转换。SQL很难在
      VARCHAR
      类型的
      之间确定

      而是将内容转换为
      DATE
      DATETIME
      (取决于您的SQL Server版本和类型)

      您还应该使用参数化查询来避免SQL注入

      像这样的方法很管用:

      using (var da = new SqlDataAdapter())
      {
          da.SelectCommand.CommandText = 
               "SELECT * FROM data WHERE CONVERT(datetime, data, 105) >= @Date1 AND CONVERT(datetime, data, 105) <= @Date2";
          //Use the DateTimePicker's Value property here, not the Text Property
          da.SelectCommand.Parameters.AddWithValue("@Date1", dateTimePicker1.Value);
          da.SelectCommand.Parameters.AddWithValue("@Date2", dateTimePicker3.Value);
          da.Fill(yourDataTable); //Or whatever you're doing
      }
      
      使用(var da=new SqlDataAdapter())
      {
      da.SelectCommand.CommandText=
      
      “从数据中选择*,其中CONVERT(datetime,data,105)=@Date1和CONVERT(datetime,data,105)不比较转换为
      VARCHAR
      的日期,在比较之前将两个日期转换为
      datetime
      。数据列为VARCHAR(50)@用户2989408我无法理解你,你能键入查询吗?如果不转换两个日期,你是什么意思?@VladimirOselsky其dd mm yyyy(24-2-2013)向我们展示一些示例数据,并且您正在将日期转换为
      VARCHAR
      ,要进行比较,您需要将它们转换为日期。仍然不起作用,当我想要选择2014年2月1日至2013年3月1日的数据时,它什么也没有显示:(兄弟,非常感谢您,现在它起作用了,我想我会对它进行更多的测试,您只是忘记了更改(VARCHAR(50),”+datetimepicker3.text+”,105)到(datetime,“+datetimepicker3.text+”,105)很高兴它能工作。我只是展示了SQL,您可以将它相应地转换为C。@user3334406我强烈建议您也使用参数化查询。