C# 此OLEDBPParameterCollection不包含具有ParameterName的OLEDBPParameter
非常简单的表单,就像我为内部工具制作的其他十几个表单一样,但这一个回击了错误“此OLEDBPParameterCollection不包含参数名为“@lookup”的OLEDBPParameter。” 唯一的区别,可能是关键,但恐怕我不知道答案,是连接字符串。我一直在Windows 2008 R2服务器上使用SQL 2008 server,因此我在Visual Studio 2008中轻松配置了连接字符串,如下所示:C# 此OLEDBPParameterCollection不包含具有ParameterName的OLEDBPParameter,c#,asp.net,sql-server,C#,Asp.net,Sql Server,非常简单的表单,就像我为内部工具制作的其他十几个表单一样,但这一个回击了错误“此OLEDBPParameterCollection不包含参数名为“@lookup”的OLEDBPParameter。” 唯一的区别,可能是关键,但恐怕我不知道答案,是连接字符串。我一直在Windows 2008 R2服务器上使用SQL 2008 server,因此我在Visual Studio 2008中轻松配置了连接字符串,如下所示: <connectionStrings> <add na
<connectionStrings>
<add name="DatasourceName" connectionString="server=servername;database=databasename;user=username;password=password;" providerName="System.Data.SqlClient"/>
</connectionStrings>
以下是ASPX代码:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyString %>"
ProviderName="<%$ ConnectionStrings:MyString.ProviderName %>"
SelectCommand="SELECT [Beneficiary First Name] AS firstname
,[Beneficiary Last Name] AS lastname
,[Beneficiary Date of Birth] AS dob
,[Address Line 1] AS [address]
,[Beneficiary Encounter Date] AS encdate
,[Beneficiary Data Sharing Preference Code] AS shareprefcode
,[Beneficiary Data Sharing Decision Mechanism Code] AS decmechcode
,[Beneficiary Alcohol and Drug Treatment Data Sharing Mechanism Co] AS damechcode
,[MRN]
,[Beneficiary HICN] AS hicn
FROM [database].[dbo].[table]
WHERE [MRN] = @lookup"
onselecting="SqlDataSource1_Selecting"
>
<SelectParameters>
<asp:Parameter Name="lookup" />
</SelectParameters>
</asp:SqlDataSource>
我已经设法克服了最初的错误。我已经更改了ASPX以删除参数声明,no go。我已将SQL查询中的参数更改为问号“no go”。此时,我没有收到任何错误或消息。在我的SQL Profiler跟踪中,它根本不会影响SQL服务器。它什么也没做
在我的一些变体中,它实际上给了我数据类型不匹配的错误,但我始终不知道如何将文本框值更改为OLEDB类型的正确数据类型。根据您的更新,我怀疑您已经非常接近于做正确的事情了。您遇到的主要问题是,您使用的是OLE DB提供程序,它在查询中不支持命名参数。相反,您必须使用位置参数,并以正确的顺序显式指定它们,作为ASP中相应参数集合的一部分 它应该是这样的:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyString %>"
ProviderName="System.Data.OleDb"
SelectCommand="SELECT list_of_columns
FROM [database].[dbo].[table]
WHERE column = ?"
OnSelecting="SqlDataSource1_Selecting">
<SelectParameters>
<asp:Parameter Name="lookup" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["@lookup"].Value = 1234;
}
错误信息非常清楚。该命令参数集合没有名为@lookup的OleDbParameter。如果可以将该标记添加到问题中,那么问题可能存在于定义SqlDataSource1的ASPX代码中……该数据源的Select命令是什么?OleDb参数是否有名称?它们不只是占位符(?)吗?查找参数在ASPX中。当我回到工作岗位时,我会发布代码,但正如我提到的,我已经做过很多次了,从来没有遇到过问题。在SqlDatasource1中,select语句是一个非常基本的select语句,带有WHERE[MRN]=@lookup。然后在“选择参数”中,只有一个参数“查找”。我当然希望这个错误信息是清楚的,或者至少对我来说是这样。我有很多像这样的小网络应用,我用它们来做比较,它们唯一的区别就是连接字符串。谢谢你们的意见。非常感谢你们花时间回答。这个信息慢慢地在我厚厚的脑袋里传播。是的,我确实在某个时候尝试过类似的事情,但是我太沮丧了,我尝试了我能想到的任何事情,所以不知道我可能忽略了什么细节。我相信我已经非常接近了,我会回到这一点,并找出答案。我的时间用完了,不得不换上以前的服务器,这样我就可以使用我的旧代码并快速完成。当然,它可以很好地与SQLParameters配合使用。再次感谢你。我将把这个标记为答案。
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyString %>"
ProviderName="<%$ ConnectionStrings:MyString.ProviderName %>"
SelectCommand="SELECT [Beneficiary First Name] AS firstname
,[Beneficiary Last Name] AS lastname
,[Beneficiary Date of Birth] AS dob
,[Address Line 1] AS [address]
,[Beneficiary Encounter Date] AS encdate
,[Beneficiary Data Sharing Preference Code] AS shareprefcode
,[Beneficiary Data Sharing Decision Mechanism Code] AS decmechcode
,[Beneficiary Alcohol and Drug Treatment Data Sharing Mechanism Co] AS damechcode
,[MRN]
,[Beneficiary HICN] AS hicn
FROM [database].[dbo].[table]
WHERE [MRN] = @lookup"
onselecting="SqlDataSource1_Selecting"
>
<SelectParameters>
<asp:Parameter Name="lookup" />
</SelectParameters>
</asp:SqlDataSource>
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
OleDbParameter fnParam = new OleDbParameter("@lookup", OleDbType.VarChar, 20);
fnParam.Value = lookup.Text;
e.Command.Parameters.Add(fnParam);
}
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyString %>"
ProviderName="System.Data.OleDb"
SelectCommand="SELECT list_of_columns
FROM [database].[dbo].[table]
WHERE column = ?"
OnSelecting="SqlDataSource1_Selecting">
<SelectParameters>
<asp:Parameter Name="lookup" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["@lookup"].Value = 1234;
}