选择 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 返回字符的主要内容,如果未能解决你的问题,请参考以下文章

Ado.net总结-Command(指挥官)

如何在 C# 中使用 SqlCommand 读取每一行和值?

SQLHelper通用类执行一条返回结果集的SqlCommand命令 使用方法

如何使用 SqlCommand::Execute(或替代方法)从同一存储过程中“选择 *”和“选择计数(*)”?

为啥“nvarchar”参数比“文本”“SqlCommand”命令的其他类型更快?

SqlCommand.ExecuteReader() 啥时候返回 null?