我有一个代码如下所示。当我尝试使用它时没有任何参数它可以工作,我从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之前替换它们。
所以有人能告诉我这里我做错了吗?