2015-06-05 112 views
1

nvarchar值0123轉換爲數據類型int時轉換失敗。將nvarchar值「A」轉換爲數據類型int時轉換失敗

private void linksdetail(string id) 
{ 
    SqlConnection con = new SqlConnection(con_string); 
    con.Open(); 

    SqlCommand cmd = new SqlCommand(" select a.solution_title,b.solution_sub_id,b.solutions_id,a.url from cms_solution_viewnew a, cms_solution_viewnew b where a.row_id = b.solution_sub_id and b.solutions_id='" + id + "'", con); 

    SqlDataReader dr = cmd.ExecuteReader(); 
    if (dr.Read()) 
    { 

     HyperLink1.Text = dr["solution_title"].ToString(); 

     HyperLink1.NavigateUrl = dr["url"].ToString(); 

    } 
    dr.Close(); 
    con.Close(); 
} 

如何解決它請幫助我。

+1

「b.solutions_id」列的類型是什麼? 'id'的類型和價值是什麼?看起來像一個數字。你不應該在數字列中使用單引號。作爲更好的方法,使用[參數化查詢](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)。這種字符串連接對於[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊是開放的。 –

+0

@soner solutions_id是int類型 – LALBABU

+0

solutions_id列數據類型是整數類型並且id的值是9 – LALBABU

回答

1

solutions_id列的數據類型是整數類型和id的值是9

錯誤消息是非常自我解釋。您嘗試將字符序列分配給int鍵入的列。根據您的示例值,您不需要在數字列中使用單引號。你可以改變你

b.solutions_id = '" + id + "'" 

b.solutions_id = " + id 

但作爲一種更好的方式,使用parameterized queries。這種字符串連接對於SQL Injection攻擊是開放的。還可以使用using statement自動處理您的SqlConnection,SqlCommandSqlDataReader,而不是手動調用Close方法。

using(var con = new SqlConnection(con_string)) 
using(var cmd = con.CreateCommand()) 
{ 
    cmd.CommandText = "select a.solution_title,b.solution_sub_id,b.solutions_id,a.url from cms_solution_viewnew a, cms_solution_viewnew b where a.row_id = b.solution_sub_id and b.solutions_id = @id"; 
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = id; 
    con.Open(); 
    using(var dr = cmd.ExecuteReader()) 
    { 
     // Do your stuff 
    } 
} 
+1

好吧,我得到了這個謝謝@ SonerGönül的答案.. – LALBABU

相關問題