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

C# 如何获取SQL表中两个日期/时间之间的行数?,c#,sql,sql-server,C#,Sql,Sql Server,如何从c#中的windows窗体应用程序中获取SQL数据库中两个日期之间和两个时间之间的行数 如屏幕截图(SQL数据库)所示,使用以下查询,我试图获取两个特定的日期和时间之间的行数: 例如:日期/时间从今天13:00:00开始,直到现在 int NumberOfRows; SqlConnection con = new SqlConnection("Data Source= pcn1;Initial Catalog=mydb;Integrated Security=True"); SqlD

如何从c#中的windows窗体应用程序中获取SQL数据库中两个
日期之间和两个
时间之间的行数

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

例如:日期/时间从今天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;
问题是:当我在button click下执行此查询时,它显示错误“将varchar数据类型转换为datetime数据类型导致值超出范围”。当我将查询格式从
yyyy-MM-dd HH-MM-ss
更改为
yyy-MM-dd
时,它可以工作,但返回的行数=0(它应该返回3)

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

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);
按上述方法更改代码,然后重试


按上述方法更改代码并重试。

不要格式化
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);

只需使用参数,而不是格式化
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);
fromDat
toDate
是两个DateTime对象

fromDat
toDate
是两个DateTime对象

这对我有用

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();
这对我有用

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();

使用参数可避免格式化。应使用参数,而不是内联参数。另外,您为什么要
搜索
日期时间
?如果要比较
datetime
s,请比较
datetime
s,而不是
datetime
s和
string
/
使用参数以避免格式化。应使用参数,而不是内联参数。另外,您为什么要
搜索
日期时间
?如果要比较
datetime
s,请比较
datetime
s,而不是
datetime
s和
string
/
varchars
s