没有为一个或多个必需参数提供值。查询中的错误是啥
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 错误 - “没有为一个或多个必需参数提供值”
“INSERT INTO 语句中的语法错误”和“没有为一个或多个必需参数提供值”
没有为 OleDBDataAdapter 的一个或多个必需参数提供值
Visual basic System.Data.OleDb.OleDbException:“没有为一个或多个必需参数提供值。”