2013-07-18 98 views
0

我有以下功能錯誤指定的轉換是無效

SqlConnection cn = new SqlConnection(constring); 
cn.Open(); 
SqlCommand cmd = new SqlCommand("select max(ID) from EP_PATTERNS ", cn); 
int h = (int)cmd.ExecuteScalar() + 1; 
txtID.Text = h.ToString(); 
cn.Close(); 

如何解決這個錯誤:

Specified cast is not valid.

+2

您必須指定發生異常的位置。 – Andy

+0

int h =(int)cmd.ExecuteScalar()+ 1; –

+0

請提供有關錯誤的更多詳細信息,它可能位於代碼的另一部分,是編譯器錯誤還是運行時異常 – ahmedsafan86

回答

2

無論表EP_PATTERNS包含任何行?否則,你試圖將NULL投射到int並失敗。

你的代碼應該是這樣的:

SqlConnection cn = new SqlConnection(constring); 
cn.Open(); 
SqlCommand cmd = new SqlCommand("select max(ID) from EP_PATTERNS ", cn); 
var value = (int?)cmd.ExecuteScalar(); 
int maxId = value.HasValue ? value.Value + 1 : 0; //Increase value or default it to zero 
txtID.Text = maxId.ToString(); 
cn.Close(); 
3

給你的代碼,我覺得修復邏輯的最簡單的方法是編輯SQL來

select ISNULL(max(ID),0) from EP_PATTERNS 

爲了更好地理解這是什麼一樣,你可以運行該SQL SSMS中:

DECLARE @table table (ID int); 
SELECT MAX(ID) FROM @table; 
SELECT ISNULL(MAX(ID), 0) FROM @table; 
+0

謝謝你,邁克爾莫雷諾。這個作品 – user2536447

0

使用​​3210你可以做到這一點:

con.Open(); 
cmd.Connection = con; 
cmd.CommandText = "select coalesce(max(user_id),0)+1 from user_master"; 
int user_id = int.Parse(cmd.ExecuteScalar().ToString()); 
txt_user_id.Text = user_id.ToString(); 
con.Close(); 
+0

是的。其作品 :) –

相關問題