为什么在某些计算机中安装应用程序时,两个日期之间的搜索不起作用



我有C sharp程序,我对这个问题感到困惑,

在两个日期之间的搜索查询中,当我在一些计算机上安装系统时,它正在工作,而另一些计算机不工作。

这是代码:

private void btnSearch_Click(object sender, EventArgs e)
{
string sql = @" select distinct   departments.dept_name,
LAB_RESULTS.order_id , 
lab_results.patient_no , 
patient_name ,
Patients.Age as 'Age',
case gender when 2 then 'Male' when 3 then 'Female' end as Gender,
customers.custid as 'Customer Id',
customers.custname ,
status_name,
lab_results.deptid,
string_agg(testname,',')  AS 'Test Name',
string_agg(lab_results.testid,',')  AS 'Test Id'
-- coalesce(groups.groupdesc,labtests.testname) AS 'Test Name'
from LAB_RESULTS 
inner join patients on lab_results.patient_no = patients.patient_no
inner join labtests on lab_results.testid = labtests.testid
inner join customers on lab_results.custid = customers.custid
inner join Departments on lab_results.deptid = departments.dept_id
inner join Lab_Sample_status on LAB_RESULTS.SAMPLE_STATUS = [Lab_Sample_status].status_id
inner join lab_orders on lab_results.order_id = lab_orders.order_id
--left join  groups on lab_results.GROUPID = groups.groupid
where lab_results.sample_status in (4,5,6) ";
string condition = "";
string orderBy = "";
string groupby = "";
orderBy += "order by order_id desc ";
groupby += "group by departments.dept_name, LAB_RESULTS.order_id , lab_results.patient_no , patient_name ,[Age],Gender,customers.custid , customers.custname ,    status_name,  lab_orders.order_date,lab_results.deptid ";
DateTime fromDate;
DateTime toDate;
if (!DateTime.TryParse(dtFromDate.Value.ToString(), out fromDate))
{
System.Windows.Forms.MessageBox.Show("Invalid From Date");
}
else if (!DateTime.TryParse(dtToDate.Value.ToString(), out toDate))
{
System.Windows.Forms.MessageBox.Show("Invalid to Date");
}
else
{
condition += " and cast(lab_orders.order_date as date) between '" + fromDate + "' and '" + toDate + "'";
}

DataTable dt = data.fireDatatable(string.Format(sql + condition+groupby+ orderBy));
dgvResult.DataSource = dt;
dgvResult.Refresh();
}

问题是什么?如何发现错误并解决问题?实际上,有些计算机使用英语文化,有些计算机则使用阿拉伯语文化,因此如何更改代码以始终使用正确的日期并运行查询?

您需要将您的条件写为

condition += " and cast(lab_orders.order_date as date) between CONVERT(DATETIME,'" + fromDate.ToString("dd/MM/yyyy") + "',103) and CONVERT(DATETIME,''" + toDate.ToString("dd/MM/yyyy") + "',103)";

最新更新