2013-08-16 28 views
4

我有这部分的代码做SELECT SqlCommandcolumn char(20)但结果总是返回0 - 这是因为我不知道如何改善我的代码,所以它会返回字符(20) - 值这是插入此列中。选择SqlCommand返回字符

SqlCommand sc = new SqlCommand("SELECT doklad FROM netpokl WHERE id_dok=" + newIdentity, spojeni); 
spojeni.Open(); 

int id_dok = Convert.ToChar(sc.ExecuteScalar()); 

spojeni.Close(); 

MessageBox.Show("" + id_dok); 

SqlCommand sc2 = new SqlCommand("UPDATE kliplat set [email protected] WHERE id="+newIdentity, spojeni); 
sc2.Parameters.AddWithValue("@doklad", id_dok); 

spojeni.Open(); 
sc2.ExecuteNonQuery(); 
spojeni.Close(); 

请问谁能帮我改进我的代码?

+5

不是你的问题的答案,但你真的需要阅读[SQL注入](http://bobby-tables.com/)。 –

+2

对于参数更好地使用ADO.Net Parameter(SqlParameter)no自制字符串 - 对Dan的答案 – BendEg

回答

4
SqlCommand sc = new SqlCommand(string.Format("SELECT doklad FROM netpokl WHERE id_dok='{0}'", newIdentity), spojeni); 
object obj = sc.ExecuteScalar(); 
if(obj == null) ; //Should show some message or throw exception 
string id_dok = obj.ToString().PadRight(20); 
//... 
SqlCommand sc2 = new SqlCommand(string.Format("UPDATE kliplat set [email protected] WHERE id='{0}'",newIdentity), spojeni); 
//... 

顺便说一句:我不认为这是必要的。事实上,你应该检查它是否长度> 20,然后字符串应该被截断。您的数据库表也应该使用nvarchar(20)

+0

你好,我试过这个,但是它给了下面的ex:对一个对象的引用没有设置为对象的一个​​实例。任何想法,我犯了什么错误? – Marek

+0

@Marek这段代码应该将'int id_dok'开始的一行代码替换为该行的结尾。 –

+0

我按照你所说的取代了它,但仍然收到相同的例外情况,不知道错误在哪里。 – Marek