C# 此OLEDBPParameterCollection不包含具有ParameterName的OLEDBPParameter

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

非常简单的表单,就像我为内部工具制作的其他十几个表单一样,但这一个回击了错误“此OLEDBPParameterCollection不包含参数名为“@lookup”的OLEDBPParameter。”

唯一的区别,可能是关键,但恐怕我不知道答案,是连接字符串。我一直在Windows 2008 R2服务器上使用SQL 2008 server,因此我在Visual Studio 2008中轻松配置了连接字符串,如下所示:

<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;
}