2009-05-27 82 views
0

我需要一些行。他们来自sql TARIH(sql列)是smalldatetime格式。但给我错误:DataRow [] rows = dsChart.Tables [0] .Select(“TARIH < ='”+ datestart +“”+ txtStartDateTime.Text +“'and TARIH > ='”+ dateend +“”+ txtEndDateTime的.text + “'”);如何使用sql查询从数据集中获取行?

无法对System.DateTime和System.String执行'< ='操作。

dsChart = eReport.ToDataSet(); 
        if (txtStartDateTime.Text != "" && txtEndDateTime.Text != "") 
         if (ValidateHoursGap(txtStartDateTime.Text.Trim()) && 
          ValidateHoursGap(txtEndDateTime.Text.Trim())) 
         { 
          DataRow[] rows = dsChart.Tables[0].Select("TARIH>='" + datestart + " " + txtStartDateTime.Text + "' and TARIH<='" + dateend + " " + txtEndDateTime.Text+"'"); 
          dsChart.Tables[0].Rows.Clear(); 
          dsChart.Tables[0].Rows.Add(rows); 
         }
+0

这些是什么datestart和dateend变量?在数据集表达式中,日期必须如下格式化:“#05/27/2009#”或“#05/27/2009 10:33:51#” – 2009-05-27 12:26:21

回答

0

我的猜测是它不会将您的字符串识别为有效的日期时间。最简单的方法是使用适当的SQL函数将字符串转换为日期。

假设它是SQL2005,您需要使用CONVERT: http://msdn.microsoft.com/pt-br/library/ms187928.aspx

因此,这将类似于此: TARIH> = CONVERT(SMALLDATETIME, ' “+ datestart + ”“ + txtStartDateTime.Text +”' ,)

其中格式是描述您的字符串使用的格式的数字,上面的链接有一个有效格式列表。

+0

他正在安慰一个数据集,而不是服务器,因此这不会工作。 – cjk 2009-05-27 12:41:51

0

我的猜测是它无法解析datestart + " " + txtStartDateTime.Text作为日期时间,因此将其视为字符串。

我会做这种转换调用Select方法之前,然后用DateTime.ToString()传递日期时间格式,将与DateTime.Parse(由Select内部使用)工作。例如如果datestart格式为 “DD/MM/YYYY”,并输入从txtStartDateTime预计是格式为 “HH:MM”

int hours = txtStartDateTime.Text.Substring(0,2); 
int minutes = txtStartDateTime.Text.Substring(3,2);  
DateTime dtStart = new DateTime(Int32.Parse(datestart.Substring(5)), Int32.Parse(datestart.Substring(3,2)), Int32.Parse(datestart.Substring(0,2)), Int32.Parse(hours), Int32.Parse(minutes)); 

然后调用

string dateFormat = "{0:s}"; 
DataRow[] rows = dsChart.Tables[0].Select(string.Format("TARIH >= '{0}' AND TARIH <= '{1}'"), dtStart.ToString(dateFormat), dtEnd.ToString(dateFormat));