Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在Where子句之外的其他位置使用OleDBCommand参数?_C#_Sql_Ms Access_Ms Access 2007_Oledbcommand - Fatal编程技术网

C# 是否可以在Where子句之外的其他位置使用OleDBCommand参数?

C# 是否可以在Where子句之外的其他位置使用OleDBCommand参数?,c#,sql,ms-access,ms-access-2007,oledbcommand,C#,Sql,Ms Access,Ms Access 2007,Oledbcommand,我有以下代码: using (OleDbCommand cmd = conn.CreateCommand()) { cmd.CommandText = string.Format( @"SELECT TOP {0} t_accounts.account_no as AccountID, IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name FROM t_accounts

我有以下代码:

using (OleDbCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = string.Format(
        @"SELECT TOP {0} t_accounts.account_no as AccountID, IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name 
        FROM t_accounts 
        INNER JOIN td_department_accounts ON (t_accounts.account_no = td_department_accounts.account_no) 
        WHERE (AccountID >= @firstId) AND type = 'DE'", CountToFetch);
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@firstId", FirstId);
  cmd.CommandText = 
        @"SELECT TOP @countToFetch t_accounts.account_no as AccountID, 
    IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name 
        FROM t_accounts 
        INNER JOIN td_department_accounts ON (t_accounts.account_no = 
    td_department_accounts.account_no) 
        WHERE (AccountID >= @firstId) AND type = 'DE'";
    . . .
  cmd.Parameters.AddWithValue("@firstId", FirstId);
  cmd.Parameters.AddWithValue("@countToFetch", CountToFetch);
…但我想知道我是否也可以使用参数作为最高计数,例如:

using (OleDbCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = 
        @"SELECT TOP @count t_accounts.account_no as AccountID, IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name 
        FROM t_accounts 
        INNER JOIN td_department_accounts ON (t_accounts.account_no = td_department_accounts.account_no) 
        WHERE (AccountID >= @firstId) AND type = 'DE'";
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@firstId", FirstId);
    cmd.Parameters.AddWithValue("@count", CountToFetch);
…或者数据库参数仅限于WHERE子句

更新 使用此代码:

using (OleDbCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = string.Format(
        @"SELECT TOP {0} t_accounts.account_no as AccountID, IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name 
        FROM t_accounts 
        INNER JOIN td_department_accounts ON (t_accounts.account_no = td_department_accounts.account_no) 
        WHERE (AccountID >= @firstId) AND type = 'DE'", CountToFetch);
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@firstId", FirstId);
  cmd.CommandText = 
        @"SELECT TOP @countToFetch t_accounts.account_no as AccountID, 
    IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name 
        FROM t_accounts 
        INNER JOIN td_department_accounts ON (t_accounts.account_no = 
    td_department_accounts.account_no) 
        WHERE (AccountID >= @firstId) AND type = 'DE'";
    . . .
  cmd.Parameters.AddWithValue("@firstId", FirstId);
  cmd.Parameters.AddWithValue("@countToFetch", CountToFetch);
…我得到,“SELECT语句包含拼写错误或缺少的保留字或参数名称,或者标点符号不正确。”

于是我又回到:

   cmd.CommandText = string.Format(
        @"SELECT TOP {0} t_accounts.account_no as AccountID, 
    IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name 
        FROM t_accounts 
        INNER JOIN td_department_accounts ON (t_accounts.account_no = 
    td_department_accounts.account_no) 
        WHERE (AccountID >= @firstId) AND type = 'DE'", CountToFetch);
    . . .
    cmd.Parameters.AddWithValue("@firstId", FirstId);
更新2 这:

…in Access告诉我“SELECT语句包含拼写错误或缺少的保留字或参数名称,或者标点符号不正确。”

注意:邮递员在拨打REST电话时会告诉我与查询结果完全相同的事情

更新3 我也在更新2中尝试过,但用“:”代替“@”,这样:

SELECT TOP (?) t_accounts.account_no as AccountID, IIF(ISNULL(t_accounts.name),'[blank]',t_accounts.name) AS Name 
FROM t_accounts 
INNER JOIN td_department_accounts ON (t_accounts.account_no = td_department_accounts.account_no) 
WHERE (AccountID >= ?) AND type = 'DE'"
我看到一篇文章,它似乎表明这是可行的,至少在T-SQL中是如此。考虑到这一点,我倾向于假设它与Access一起工作。正如上面所说的,记住要包括括号


无论如何,参数只能在
WHERE
子句中是绝对不正确的。你可以在
SELECT
,甚至是
ORDER BY

中使用它们,我得到的可能重复的“SELECT语句包含一个保留字或一个拼写错误或缺少的参数名,或者标点不正确。”那篇文章说在括号中包含参数:
SELECT TOP(@countToFetch)t\u账户…
。这样效果更好吗?听起来不错。您可能还想在Access本身中尝试它。有时,这可以毫无理由地提供有价值的见解。当然,这很有可能只是在访问中不可行。这有点令人惊讶,但我想it和T-SQL之间在某些方面肯定存在差异。Access是否像T-SQL一样有语法图?我怀疑这将是一个确定的来源。我只是看了一下,但我只能在Office上找到更“用户友好”的页面,这些页面实际上没有说任何有用的内容。不过,我希望语法与其他参数的语法相同。我是说,这确实是一个有趣的问题。如果不查找SQL,我永远不会猜到或弄明白它需要那些括号,所以它很可能是在寻找一个完全随机的指示符。