如何从特定列的第一个表格单元格中获取单个值

时间:2016-04-13 18:56:09

标签: c# sql ado.net

我想将eurvalue变量设置为等于AvailableMoney表格中第一个单元格的值,列为EUR 我试过这个

float eurvalue;
            string connectionString = @"Data Source=C:\Users\FluksikartoN\Documents\BFDB.sdf;Password=Corocoro93!";
            string sql = "SELECT EUR FROM AvailableMoney";
            using (SqlCeConnection conn = new SqlCeConnection(connectionString))
            {
                conn.Open();
                using (SqlCeCommand cmd = new SqlCeCommand(sql, conn))
                {
                    eurvalue = (float)cmd.ExecuteScalar();
                    //cmd.Parameters.AddWithValue("@valueeur", value);                   
                   // cmd.ExecuteNonQuery();
                }
            }
            label2.Text = eurvalue.ToString();

2 个答案:

答案 0 :(得分:1)

使用ExecuteReader代替ExecuteScalar。方法ExecuteReader返回SqlCeDataReader,允许从数据源中读取仅向前的行流。

        float eurvalue = 0.0f;
        string connectionString = @"Data Source=C:\Users\FluksikartoN\Documents\BFDB.sdf;Password=Corocoro93!";
        string sql = "SELECT TOP 1 EUR FROM AvailableMoney";
        using (SqlCeConnection conn = new SqlCeConnection(connectionString))
        {
            conn.Open();
            using (SqlCeCommand cmd = new SqlCeCommand(sql, conn))
            {
                using(var reader = cmd.ExecuteReader())
                {
                    if(reader.Read())
                    {
                        eurvalue = reader.GetFloat(0);
                    }
                }
            }
        }
        label2.Text = eurvalue.ToString();

答案 1 :(得分:1)

完全是关于强大的错误和空检查。

顺便说一下,float通常是货币/货币的不良数据类型,因为它会失去精确度。我不知道SQL Server CE提供了什么,但如果可以,请使用小数类型。

using (SqlCeCommand cmd = new SqlCeCommand(sql, conn))
{
   object val = cmd.ExecuteScalar();
   if(val != null) 
   {
      if(float.TryParse(val.ToString(), out eurvalue))
      {
         label2.Text = eurvalue.ToString();
      }
   }       
}