2013-04-12 43 views
0

我试图使用从我的数据库中的数据SqlDataReader的简单的SELECT在C#中抛出“附近有语法错误‘=’”

但我得到一个语法错误获得“System.Data.SqlClient.SqlException :'='“附近的语法不正确,我不知道它的含义。

这是我的代码

cmd = new SqlCommand("Select Submission_Attachment as Path from Tasks where Submission_FileName =" + FileName, con); 
reader = cmd.ExecuteReader(); 
while (reader.Read()) 
{ 
    FilePath = reader["Path"].ToString(); 
    TextBox1.Text = FilePath; 
} 

有错误示出了在读取器= cmd.ExecuteReader();

+5

您需要使用参数化查询 – LittleBobbyTables

+1

几个人描述的修复你的问题,但我想这可能也是值得一提的是,该错误是从SQL Server的未来,这是一个关于你构建的查询投诉。 –

回答

15

使用参数来避免SQL注入。

您的当前字符串未被引起错误的单引号包围。

string sqlText = "Select Submission_Attachment as Path from Tasks where Submission_FileName = @fileName"; 
cmd = new SqlCommand(sqlText, con); 
cmd.Parameters.AddWithValue("@fileName", FileName); 
reader = cmd.ExecuteReader(); 
+4

提及参数+1。 –

3

Submission_FileName可能是一个字符串(varchar)字段。您需要用单引号将值包装起来:

cmd = new SqlCommand("Select Submission_Attachment as Path from Tasks where Submission_FileName = '" + FileName + "'", con); 

仍然需要使用参数化查询来抵消SQL注入。

0
cmd = new SqlCommand("Select Submission_Attachment as Path from Tasks where Submission_FileName = @filename", con); 
cmd.Parameters.Add("@filename", SqlDbType.VarChar, [varchar length here]).Value = FileName; 
reader = cmd.ExecuteReader(); 
while (reader.Read()) 
{ 
    FilePath = reader["Path"].ToString(); 
    TextBox1.Text = FilePath; 
}