连接到openquery时sqlconnector获取查询准备错误

时间:2018-03-14 10:38:04

标签: c# linked-server

我有一个代码如下所示。当我尝试使用它时没有任何参数它可以工作,我从SQL语句得到一个结果,bt一旦我尝试使用参数...... c#喊我们:“准备查询时出错了.. ....对OLE DB提供程序执行“。

如此信息:我在SQL Server上使用链接服务器与db2服务器通信。

对于代码,prepareDb2Statement只是将openquery放在它周围。 NamedParameter只是一个值和Name类。

    public DataTable Execute(string executeString, List<NamedParameter> parameterList)
    {
        DataTable data = new DataTable();
        string preparedExecuteString = this.PrepareDb2Statement(executeString);

        try
        {
            using (SqlConnection databaseConnection = new SqlConnection(_ConnectionString))
            {
                using (SqlDataAdapter databaseDataAdapter = new SqlDataAdapter(preparedExecuteString, databaseConnection))
                {
                    if (parameterList != null && parameterList.Count > 0)
                    {
                        foreach (NamedParameter parameter in parameterList)
                        {
                            databaseDataAdapter.SelectCommand.Parameters.AddWithValue(parameter.Name, parameter.Value);
                        }
                    }

                    databaseDataAdapter.SelectCommand.CommandTimeout = _CommandTimeout;
                    databaseDataAdapter.Fill(data);
                }
            }
        }
        catch (Exception ex)
        {
            return null;
        }

        return data;
    }

执行示例:

        List<NamedParameter> _list = new List<NamedParameter>
        {
            new NamedParameter("@client", cli),
            new NamedParameter("@account", acc)
        };

        this.Execute("SELECT * FROM sales WHERE Client=@client AND account=@account");

preparedExecutestring是:select * from openquery(mylinkedServer, 'SELECT * FROM sales WHERE Client=@client AND account=@account')

如上所述,当我尝试没有任何参数的SQL时,它按预期工作。使用参数我得到错误。现在我知道openquery本身在从SQL Server中运行时不喜欢参数,但是这不应该影响它,因为sqlconnector在执行SQL之前替换它们。

所以有人能告诉我这里我做错了吗?

0 个答案:

没有答案