【发布时间】:2013-06-24 20:48:24
【问题描述】:
我正在使用数据库将部门名称与其唯一的邮寄代码相关联,即会计有邮寄代码 1337。ShortName 和 ID 是正在查询的数据库字段。
架构是
ID intShortName nvarchar(255)
这是使用 C# 在网页的后端完成的。我在同一代码的其他地方使用了SqlDataReader 对象,但没有由此引起错误。我想我在某处有语法错误,或者我试图将一个字符串插入一个 int 或一些愚蠢的东西,但我看不到它。
SqlConnection 设置正确,因为它用于页面加载时的查询,并且在指示的行被注释掉时工作。
SqlDataReader SQl_Reader;
string cmdString = "SELECT ShortName FROM departments WHERE (ID = " +
department_Text.SelectedValue.ToString() + ")"; //a selected value in department_text would be the mailing code such as 1337, or 1304.
SqlCommand SQl_Command2 = new SqlCommand(cmdString, SQl_Connection);
SQl_Reader = SQl_Command.ExecuteReader();
string deptName = SQl_Reader["ShortName"].ToString();//This should assign the deptName = the value in SQl_Reader but it causes the page not to load. Not sure what is wrong with it
SQl_Reader.Close();
SQl_Connection.Close();
我已经尝试了多种不同的方法,即使只为此查询使用专有的连接、命令和阅读器。我已经将SqlDataReader 用于类似目的,在代码的另一个函数中使用相同的两个字段,并且效果很好。任何见解将不胜感激。
【问题讨论】:
-
您在这段代码中有一个非常严重的 sql 注入漏洞。您需要改为使用参数化查询。
department_Text的值很可能不是您认为的那样,并且查询没有返回任何结果,因此当您在空引用上调用ToString()时会引发异常。 -
在阅读任何内容之前不应该调用 SQL_Reader.Read() 吗?
标签: c# sql sql-server