没有为一个或多个必需参数提供值。查询中的错误是啥

Posted

技术标签:

【中文标题】没有为一个或多个必需参数提供值。查询中的错误是啥【英文标题】:No value given for one or more required parameters.What is error in query没有为一个或多个必需参数提供值。查询中的错误是什么 【发布时间】:2020-08-06 07:58:02 【问题描述】:
  if (conn.State == ConnectionState.Closed)  conn.Open(); 
  string sql = "SELECT debit.tblgltransactions AS Debit,credit.tblgltransactions AS Credit,glaccounttype.tblglaccounttypes  from tblgltransactions,tblglaccounttypes where glaccounttype.tblglaccounttypes='" + cmbGeneralLedgerAccounts + "'and transactiondate.tblgltransactions='"+dtpFromDate+"'AND '"+dtpToDate+"'";
  OleDbCommand cmd = new OleDbCommand(sql, conn);
  OleDbDataAdapter oda = new OleDbDataAdapter(cmd);
  DataTable dt = new DataTable();
  oda.Fill(dt);
  dgvGeneralLedger.DataSource = dt.DefaultView;
  if (conn.State == ConnectionState.Open)  conn.Close(); 

【问题讨论】:

我要做的第一件事是更改您的查询以使用参数,而不是直接将值作为字符串放入。您当前的方法是 SQL 注入攻击是如何发生的。参数化查询除了安全性之外还有其他优点:它们提供了“代码”(查询)和“数据”(参数)更清晰的分离,并且转换(例如日期部分)出错的空间更小。 这里明显的错误是AND '"+dtpToDate+"'";,你没有将它与任何可能不需要的东西进行比较。您还缺少空格。但错误消息完全指的是其他内容,即在FROM 子句中输入错误或未引用的字段 【参考方案1】:

也许您错过了这些“AND”语句前面的空格? 据我所知,您指的是 transactiondate 表,而没有在 from 或 join 语句中声明它。

编辑: 您没有在 where 条件下引用这两个表。不知道应该怎么做。

【讨论】:

以上是关于没有为一个或多个必需参数提供值。查询中的错误是啥的主要内容,如果未能解决你的问题,请参考以下文章

查询带有标题的制表符分隔的文本文件时出现 VBA 错误 - “没有为一个或多个必需参数提供值”

VBA SQL'没有为一个或多个必需参数提供值'但字段存在

“INSERT INTO 语句中的语法错误”和“没有为一个或多个必需参数提供值”

数据库错误:“没有为一个或多个必需参数提供值。”

没有为 OleDBDataAdapter 的一个或多个必需参数提供值

Visual basic System.Data.OleDb.OleDbException:“没有为一个或多个必需参数提供值。”