【问题标题】:Datetime Parse Query日期时间解析查询
【发布时间】:2016-11-26 22:08:17
【问题描述】:

我正在尝试在数据库中捕获两个日期之间的数据。

当我尝试在 SQL Server Management Studio 中执行此查询时,它工作正常。

SELECT
    cha_tarihi
FROM
    CARI_HESAP_HAREKETLERI
WHERE
    ha_tarihi BETWEEN '2016-02-10' AND '2016-10-10';

但是当我想在我的 C# 项目中尝试时,它不起作用,没有从数据库返回任何数据。

我正在尝试大约两个小时,请帮助解决什么问题?

在我的 C# 项目中查询

 var editeddate = DateTime.ParseExact(
    dateEdit1.EditValue.ToString(),
    "d.M.yyyy hh:mm:ss", CultureInfo.InvariantCulture
);

var editeddate2 = DateTime.ParseExact(
    dateEdit2.EditValue.ToString(),
    "d.M.yyyy hh:mm:ss", CultureInfo.InvariantCulture
);

query.Sql =
    @"select cha_tarihi from CARI_HESAP_HAREKETLERI where cha_tarihi between '" +
    editeddate.ToString( "yyyy-MM-dd" ) +
    "' AND '" +
    editeddate2.ToString("yyyy-MM-dd") +
    "'";

【问题讨论】:

  • 停止这样构建你的 SQL。请改用参数化查询。这可能是问题,也可能不是问题,但这绝对是首先要做的事情。
  • 关键字SQL Injection
  • 为什么要格式化两次日期?不太确定结果会是什么。查看editeddate中的内容(已经是一个字符串).toString("yyyy-MM-dd")。
  • Devexpress datetime 返回另一种格式 ddont 从查询中接受因为这个我尝试解析,它们是不同的日期第一个开始日期第二个结束日期
  • 我认为答案很简单,editeddateediteddate2 不包含您认为它们包含的值。

标签: c# sql-server datetime


【解决方案1】:
var sql = @"SELECT cha_tarihi 
            FROM   CARI_HESAP_HAREKETLERI 
            WHERE  cha_tarihi BETWEEN @startdate AND @enddate";

var command = new SqlCommand(sql, {your connection});

// You have EditValue.ToString() - what is the type of this value?
// You maybe be able to skip the DateTime.Parse
command.Parameters.Add("@startdate", SqlDbType.DateTime2)
                  .Value = DateTime.Parse(dateEdit1.EditValue)
                                   .ToString("yyyy-MM-dd"); 
command.Parameters.Add("@enddate", SqlDbType.DateTime2)
                  .Value = DateTime.Parse(dateEdit2.EditValue)
                                   .ToString("yyyy-MM-dd");

【讨论】:

  • SQL 字符串中的参数需要使用@ 前缀(而不是$) ....
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 2013-02-04
  • 2015-07-22
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多