2015-10-16 49 views
1

我試着去接受一個字符串轉換爲整數,代碼是這樣的:如何轉換避免System.FormatException的數據類型?

 int menu = 3 
     int orden = 0; 
     string query = @"select max(oppord)+1 as orden 
         from rhlibry.vaoppfi 
         where pincor = " + menu; 
     OdbcConnection cn = new OdbcConnection("dsn=RHLIBRY;uid=PC00;pwd=PC00;"); 
     OdbcCommand cmd = new OdbcCommand(query, cn); 
     cn.Open(); 
     OdbcDataReader oa = cmd.ExecuteReader(); 
     while (oa.Read()) 
     { 
      orden = Int32.Parse(oa["orden"].ToString()); 
     } 
     return orden; 

以字符串格式SQL查詢返回「奧登」,我需要轉換成整型。

orden = Int32.Parse(oa["orden"].ToString());返回System.FormatException類型的錯誤。

爲什麼?我做錯了?

請幫幫我!

謝謝

+0

什麼是'oppord'的數據類型? –

+0

stephen,數據類型是數字(8,0)在數據庫中 –

+0

您在該表中有任何記錄嗎?這可能是因爲oa [「orden」]是'DBNull.Value' –

回答

2

這可能是因爲您的查詢返回空值。

假設您有一個具有值爲1,2,3的Id列的Category表。 如果您運行此查詢:

SELECT Max(Id)+1 As Id From Category WHERE Id = -1 

,您會收到這樣的結果:

Id 
---------- 
NULL 

所以,當你使用Int32.Parse(oa["Id"].ToString())您會收到出現FormatException。

作爲一個修復你可以使用:

SELECT ISNULL(Max(Id),0)+1 As Id From Category WHERE Id = -1 

此外,如果你的業務邏輯允許的話,你可以刪除的標準。

此外,在C#的一面,你可以使用int.TryParse():

int id = 0; 
var idObject= oa["Id"]; 
if (idObject!=null) 
    int.TryParse(oa["Id"].ToString(), out id); 
+0

'TryParse'是我的第一個想法 - 太棒了 –

+0

歡迎:) –