在我的代码中,当时日期之间的日期不相同。
在datebase中,DueDate字段被选为日期类型而非日期时间
sqlString = "Select [VehiNo], [DueDate], [Works] From [Daily] Where [DueDate] <= '" + today.ToShortDateString() + "' and [ServiceDate] Is NULL";
MessageBox.Show(sqlString);
using (SqlCommand cmd = new SqlCommand(sqlString, conn))
{
cmd.CommandType = CommandType.Text;
SqlDataReader reader = cmd.ExecuteReader();
dtDue.Load(reader);
}
if (dtDue.Rows.Count > 0)
{
dataListOverDue.DataSource = dtDue;
dataListOverDue.Columns["VehiNo"].HeaderText = "Vehicle No";
}
我有3个数据网格视图和3个sql语句,每个用于查找今天到期的截止日期到期日期到期,并已到期。
我尝试了很多东西,但没有一个工作,我不知道为什么。 我已经尝试了这样的参数。
string sqlString = "Select [VehiNo], [DueDate], [Works] From [Daily] Where [DueDate]='@today' and [ServiceDate] Is NULL";
cmd.Parameters.AddWithValue("@today", today.ToString());
sqlString = string.Format("Select [VehiNo], [DueDate], [Works] From [Daily] Where [DueDate] Between '@today' And '@next'");
cmd.Parameters.AddWithValue("@today", today.ToString());
cmd.Parameters.AddWithValue("@next", next.ToString());
选择=不返回任何内容
选择中间给出转换失败错误
选择&lt; =返回我在图像中显示的所有日期。
答案 0 :(得分:0)
尝试以下
string sqlFormattedDate = today.ToString("yyyy-MM-dd HH:mm:ss.fff");
或
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
并使用sqlFormattedDate
不要使用字符串连接,请使用参数化查询。传入DateTime类型的参数值。这样可以完全避免格式化问题,提高后续查询的性能,并解决在以这种方式形成SQL时您可以打开的固有漏洞(SQL注入)。
"where @dateTime <= DateTimeField"
答案 1 :(得分:0)
问题在于您生成查询并向其添加参数的方式。
您不需要将查询参数包装在单引号内。如果列和参数的数据类型匹配,您也不需要转换参数值ToString()。
通过以下解决方案。
string sqlString = "Select [VehiNo], [DueDate], [Works] From [Daily] Where [DueDate] = @today and [ServiceDate] Is NULL";
var sqlCommand = new SqlCommand();
sqlCommand.CommandText = sqlString;
sqlCommand.Parameters.Add("@today", SqlDbType.DateTime);
sqlCommand.Parameters["@today"].Value = today;
var next = today.AddDays(20);
sqlString = string.Format("Select [VehiNo], [DueDate], [Works] From [Daily] Where [DueDate] Between @today And @next");
sqlCommand.Parameters.Add("@today", SqlDbType.DateTime);
sqlCommand.Parameters["@today"].Value = today;
sqlCommand.Parameters.Add("@next", SqlDbType.DateTime);
sqlCommand.Parameters["@next"].Value = next;
这可以解决您的问题。