如何获取SQL表中两个日期/时间之间的行数?

时间:2015-12-15 15:51:48

标签: c# sql sql-server

如何从c#中的Windows窗体应用程序中获取SQL数据库中两个dates和两个times之间的行数?

screenShot

如屏幕截图(SQL数据库)所示,并使用以下查询,我试图获取两个特定datestimes之间的行数:

例如:日期/时间从今天开始13:00:00到现在为止。

int NumberOfRows;
 SqlConnection con = new SqlConnection("Data Source= pcn1;Initial Catalog=mydb;Integrated Security=True");
 SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Orders WHERE DateTime BETWEEN '" + DateTime.Today.AddHours(13).ToString("yyyy-MM-dd HH-mm-ss") + "' AND '" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "'  ", con);

 DataTable dt = new DataTable();
 sda.Fill(dt);
 NumberOfRows= dt.Rows.Count;

问题是:当我在按钮下执行此查询时,单击它会显示错误"将varchar数据类型转换为日期时间数据类型会导致超出范围的值"。当我将查询格式从yyyy-MM-dd HH-mm-ss更改为yyyy-MM-dd时,它可以正常工作,但它会返回行数= 0(它应该返回3)。

我做错了什么?请帮助如何获取查询中显示的特定日期/时间之间的行数。

4 个答案:

答案 0 :(得分:3)

不是格式化DateTime值并将它们连接到查询字符串中,而是使用参数。

SqlCommand command = con.CreateCommand();
command.CommandText = "SELECT * FROM Orders WHERE DateTime BETWEEN @FromDate AND @ToDate";
command.Parameters.Add("@FromDate", SqlDbType.DateTime).Value = DateTime.Today.AddHours(13);
command.Parameters.Add("@ToDate", SqlDbType.DateTime).Value = DateTime.Now;
SqlDataAdapter sda = new SqlDataAdapter(command);

答案 1 :(得分:1)

SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Orders WHERE DateTime BETWEEN '" + DateTime.Today.AddHours(13).ToString("yyyyMMdd HH:mm:ss") + "' AND '" + DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + "'  ", con);

在上面的代码中进行更改并尝试。

答案 2 :(得分:1)

    sda = new SqlDataAdapter("SELECT * FROM Orders WHERE DateTime BETWEEN @from AND @to",con);
    sda.SelectCommand.Parameters.AddWithValue("@from",fromDate);
    sda.SelectCommand.Parameters.AddWithValue("@to",toDate);

fromDattoDate是两个DateTime对象;

答案 3 :(得分:1)

这对我有用

string myScalarQuery = "select count(*) from TableName where WHERE DateTime BETWEEN @from AND @to";

SqlCommand myCommand = new SqlCommand(myScalarQuery, myConnection);
mycommand.Parameters.AddWithValue("@from",fromDate);
mycommand.Parameters.AddWithValue("@to",toDate);

myCommand.Connection.Open();
int count = (int) myCommand.ExecuteScalar();
myConnection.Close();