2015-09-28 125 views
0

我从我的数据库中选择最大ID有点问题。这是我的代码:ExecuteScalar返回错误的值

string checkcat = "SELECT MAX(PRODUCT_ID) FROM CMS_PRODUKTY WHERE (CATEGORY_ID = CATEGORY_ID) AND (CLIENT_ID = @CLIENT_ID)"; 
SqlCommand cmd2 = new SqlCommand(checkcat, con); 
cmd2.Parameters.Add("@CATEGORY_ID", System.Data.SqlDbType.Int).Value = kategoria; 
cmd2.Parameters.Add("@CLIENT_ID", System.Data.SqlDbType.Int).Value = HiddenField1.Value; 
con.Open(); 
int noweid = Convert.ToInt32(cmd2.ExecuteScalar()); 
con.Close(); 

点是新的诠释“noweid”应该是1或更高版本 - 依赖于表格内的product_id,但它返回0。我没有任何想法,为什么...的其他变量 - kategoria和HiddenField1.Value是正确的。

任何想法我做错了什么?

+0

您是否尝试过使用SQL Server Management Studio对数据库执行此查询并验证它是否返回1或更高? –

+1

它不会解决你的问题,但你有一个错字'(CATEGORY_ID = CATEGORY_ID)'应该是'(CATEGORY_ID = @CATEGORY_ID)' - 注意'@'。 – petelids

回答

2

你有

WHERE (CATEGORY_ID = CATEGORY_ID) 

但你要

WHERE (CATEGORY_ID = @CATEGORY_ID) 

你也应该解析字符串int

cmd2.Parameters.Add("@CLIENT_ID", System.Data.SqlDbType.Int).Value = int.Parse(HiddenField1.Value); 

也许kategoria也是string,然后分析它也到int

+0

谢谢。它的工作完美。已经读过这个代码千次,并没有看到这样的错误...只需要添加@到SQL条件。 – Ashiv3r