【问题标题】:Error - No value given for one or more required parameters错误 - 没有为一个或多个必需参数提供值
【发布时间】:2013-05-09 18:17:39
【问题描述】:

我在处理我的项目时遇到问题。

我正在尝试从 Excel 文件中读取数据。当我尝试选择大于 Col1Value 的行时,它工作正常,但在我添加 AND Gender = " + gender; 后,它给了我错误“没有为一个或多个必需参数提供值”我无法设置特定的性别列,因为它是尽管列名相同并且在我尝试填充数据集时出现错误,但每个 excel 文件都不同。

if (boxGender.Text != "")

string gender = boxGender.Text;
string col1Name = lbl1stColumn.Text;


string Query = "select * from [data$] where " + 
               col1Name + " > " + Col1Value + 
               " AND Gender = " + gender;                                                
OleDbDataAdapter dacol1 = new OleDbDataAdapter(Query, con);                        
    Column1Data.Clear();
    dacol1.Fill(Column1Data)
    lblStuCount1Col.Text = Column1Data.Tables[0].Rows.Count.ToString();

【问题讨论】:

  • 谨防 SQL 注入
  • Should we include tags in question titles ? : 不,我们不应该。我们应该用 BOLD 写标题吗? : 不,我们不应该。
  • 只有我会这样使用它.. :)
  • Gender 是字符串值还是数字?如果是字符串 gender 应该用引号引起来。 col1Namegender 运行时为空或空白?
  • @EimantasBaigys 尽早养成良好习惯,这样您就不会在真正重要的时候犯错,最终在包含重要敏感数据的应用程序中留下巨大的安全漏洞。

标签: c# oledb


【解决方案1】:

您需要将字符串值括在单引号中,并将列名括在方括号中:

string Query = "select * from [data$] where [" + 
               col1Name + "] > " + Col1Value + 
               " AND Gender = '" + gender + "'"; 

【讨论】:

  • 括号中的列名不应该是必需的,对吧?没有空格,当然col1Name 不是关键字。
  • col1name 是一个变量,而不是文字。它可以包含一个带有空格的值。
  • col1Name 是一个仅包含 1 个单词的变量
【解决方案2】:

我认为您的 SQL 查询中可能缺少引号:

string Query = "select * from [data$] where " + col1Name + " > '" + Col1Value + "' AND Gender = '" + gender +"'";

注意添加了单引号 (') 符号。

【讨论】:

  • 是的,这就是问题所在,谢谢先生
  • 当我执行这个查询时,它会根据性别获取所有数据,但是它不会过滤例如男性,其中 'col1Name > Col1Value' 而是显示所有男性......有什么建议吗?
  • @EimantasBaigys 如果在这行代码中设置断点,col1name 和 Col1Value 的值是否正确?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多