从查询结果中获取double值

时间:2013-11-17 22:58:04

标签: c# sql-server

我在C#中调用了一个存储过程,结果是:

0.033333
0.550000
0.133333
24.133333

在我的c#代码中,我需要检查哪一个高于24.如何才能对查询结果进行双重转换呢?

这是我的代码:

sqlConnection con2 = conec.ObtenerCon();
SqlCommand com2 = new SqlCommand("ind_meta", con2);
com2.CommandType = System.Data.CommandType.StoredProcedure;
com2.Parameters.Add("@finicial", SqlDbType.DateTime);
com2.Parameters["@finicial"].Value = Convert.ToDateTime(fini + " " + hini);
com2.Parameters.Add("@ffinal", SqlDbType.DateTime);
com2.Parameters["@ffinal"].Value = Convert.ToDateTime(ffin + " " + hfin);

DataTable ds1 = new DataTable();

using (SqlDataAdapter a1 = new SqlDataAdapter(com2))
{
   a1.Fill(ds1);
}                               

foreach (DataRow dsRow1 in ds1.Rows)
{
  if (double.Parse(dsRow1[0].ToString(), NumberStyles.Currency) < 24)
           a++;
  if (double.Parse(dsRow1[0].ToString(), NumberStyles.Currency) > 24 &&  
 double.Parse(dsRow1.ToString(), NumberStyles.Currency) < 48)
           b++;
 if (double.Parse(dsRow1[0].ToString(), NumberStyles.Currency) > 48)
   c++;
}

1 个答案:

答案 0 :(得分:1)

我假设您没有将double值转换为数据库中的字符串,因此您无需将其转换为C#中的字符串。你只需要相应地投射它。

double value = dsRow1.Field<double>(0);

完整的循环:

foreach (DataRow dsRow1 in ds1.Rows)
{
    double value = dsRow1.Field<double>(0);
    if (value < 24)
        a++;
    else if (value >= 24 && value < 48)
        b++;
    else
        c++;
}

编辑:“它不起作用,错误是关于转换,查询是:datediff(date1,date2)/ 60

DATEDIFF有三个参数,因此您的代码甚至会导致语法错误。但我假设您使用datepart参数,例如小时:

DATEDIFF(hh, date1,date2)/60

这是整数除法,因为DATEDIFF返回有符号整数。整数除法总是产生整数,小数部分被截断。您需要将一侧转换为浮点数:

SELECT DATEDIFF(mi, GetDate(),DATEADD(dd,1,GetDate())) / CAST(60 AS DECIMAL(9,2))

现在您可以将其投射到decimal

foreach (DataRow dsRow1 in ds1.Rows)
{
    decimal value = dsRow1.Field<decimal>(0);
    if (value < 24)
        a++;
    else if (value >= 24 && value < 48)
        b++;
    else
        c++;
}

但是,为什么你需要分为60?听起来好像你想要从几分钟开始。然后你可以在第一时间使用正确的datepart

DATEDIFF(hh, GetDate(),DATEADD(dd,1,GetDate()))