2016-04-13 73 views
0

的第一個單元格的單值我想設置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(); 
+0

什麼是你的結果?這應該工作,你的情況下'ExecuteScalar'優於'ExecuteReader'。 – Crowcoder

+0

eurvalue =(float)cmd.ExecuteScalar();錯誤:指定的轉換無效。 –

+0

暫時使用'object'而不是'float'來查看你的結果是否爲null或者不能轉換爲'float'。 – Crowcoder

回答

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(); 
     } 
    }  
} 
+0

所以你說浮動是問題,如果我改變它真正的它會工作 –

+0

不,使用浮動數據類型不是你的編程問題。我只是在說一個方面,說它不太適合代表金錢。與Real相同的東西。如果改變模式還不算太晚,請使用'money'類型。 – Crowcoder

+0

我明白了,但我只想將數字保存到數據庫中,然後檢索它們,並將它們轉換爲任何我想要的,但也許你是正確的即時通訊對於C​​#和SQL來說真的很新,但無論如何,感謝您的代碼工作 –

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(); 
+0

奇怪的事情eurvalue錯誤'使用未分配的局部變量' –

+0

@GeorgiAntonov,你應該初始化變量'eurvalue',我已經更新回答。 –

+0

錯誤字符型double不能隱式轉換爲類型'float';使用'F'後綴來創建這種類型的文字 –