选择 SqlCommand 返回字符
Posted
技术标签:
【中文标题】选择 SqlCommand 返回字符【英文标题】:Select SqlCommand return char 【发布时间】:2013-08-19 09:39:33 【问题描述】:我有这部分代码为 column char(20)
执行 SELECT SqlCommand
但结果总是返回 0
- 这是因为我不知道如何改进我的代码,所以它会返回 char(20) - 在此列中插入的值。
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 doklad=@doklad WHERE id="+newIdentity, spojeni);
sc2.Parameters.AddWithValue("@doklad", id_dok);
spojeni.Open();
sc2.ExecuteNonQuery();
spojeni.Close();
有人可以帮我改进我的代码吗?
【问题讨论】:
不是你的问题的答案,但你真的需要阅读SQL injection。 对于参数更好地使用 ADO.Net 参数 (SqlParameter) 没有自制字符串 - 丹的回答 【参考方案1】: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 doklad=@doklad WHERE id='0'",newIdentity), spojeni);
//...
顺便说一句:我认为这没有必要。事实上,你应该检查它的长度是否 > 20,那么字符串应该被截断。您的数据库表也应该使用nvarchar(20)
。
【讨论】:
您好,我试过了,但它给出了以下示例:对对象的引用未设置为对象的实例。知道我在哪里犯错了吗? @Marek 此代码应替换您从int id_dok
开始到该行末尾的一些行。
我按照你说的替换了它,但仍然收到相同的异常,不知道错误在哪里。
@Marek 在哪一行突出显示?
在 ´string id_dok = obj.ToString().PadRight(20);´以上是关于选择 SqlCommand 返回字符的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中使用 SqlCommand 读取每一行和值?
SQLHelper通用类执行一条返回结果集的SqlCommand命令 使用方法
如何使用 SqlCommand::Execute(或替代方法)从同一存储过程中“选择 *”和“选择计数(*)”?