2014-06-11 2 views
0

내부 도구 용으로 만든 12 개의 다른 항목과 같은 매우 단순한 형태이지만 "OleDbParameter with ParameterName '@lookup'은이 OleDbParameterCollection에 포함되어 있지 않습니다. . "ParameterName이있는 OleDbParameter는이 OleDbParameterCollection에 포함되어 있지 않습니다.

유일한 차이점은 아마도 이것의 핵심이지만, 나는 대답을 모르겠다는 연결 문자열입니다. 그래서 내 연결 문자열을 쉽게 아래와 같이 내 비주얼 스튜디오 2008에 구성되어있는 윈도우 2008 R2 서버에 SQL 2008 서버를 사용하고있다 : 그러나

<connectionStrings> 
    <add name="DatasourceName" connectionString="server=servername;database=databasename;user=username;password=password;" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

, 난 여전히 VS 2008를 사용하고 있지만 ' 내 데이터 소스에 대한 SQL 2012 서버에 연결 m은 그래서 연결 문자열 변경했다 :이 오류를 본 적이 있기 때문에 궁금 그래서

<connectionStrings> 
     <add name="server2012name" connectionString="Provider=SQLNCLI11.1;Data Source=ServerName;Persist Security Info=True;Password=password;User ID=userid;Initial Catalog=catalog" 
     providerName="System.Data.OleDb" /> 
    </connectionStrings> 

을하면 내가 작동하지 않습니다 사용하고 코드 어떤 이유로 든 oledb 연결. 여기

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
{ 
    e.Command.Parameters["@lookup"].Value = lookup.Text.ToString(); 

} 

영문 코드 : 코드의 잘못된 부분은 코드 숨김에

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

내가 다른 어셈블리를 포함 필요하십니까은? 다른 명령을 사용하여 매개 변수를 추가합니까?

나는 몇 시간 동안 이것을 봤고 내가 찾은 것을 읽었지만 아무 것도 이것과 관련이없는 것으로 보였다. 이 e.Command.Parameters 행을 권장하면 오류가 사라지지만 쿼리는 아무 것도 반환하지 않습니다.

모든 안내에 감사드립니다.

EDIT 불행히도,이 사람은 답을 얻지 못할 것 같습니다. 이 모든 것이 무엇인지 아는 사람이 올 경우에 대비하여 여기에 조금 더 추가 할 것입니다.

저는 OleDbParameters에 관해 모두 읽었으며 대략 옳은 길 같습니다. 코드 숨김을 약 50 가지로 변경했습니다.

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

그리고 원래의 오류를 지나서 관리 할 수있었습니다. 매개 변수 선언을 제거하기 위해 ASPX를 변경했습니다. SQL 쿼리의 매개 변수를 물음표 (no go)로 변경했습니다. 이 시점에서 어떤 종류의 오류 또는 메시지도 표시되지 않습니다. 내 SQL 프로파일 러 추적에서는 SQL Server를 전혀 사용하지 않습니다. 아무것도하지 않는 것뿐입니다.

유사 콘텐츠 중 일부에서는 실제로 데이터 형식이 일치하지 않는 오류가 발생했지만 OleDbType에 적합한 데이터 형식으로 텍스트 상자 값을 변경하는 방법을 찾지 못했습니다.

+0

오류 메시지는 매우 분명하다. 그 명령 매개 변수 컬렉션에는 @lookup이라는 OleDbParameter가 없습니다. 문제는 해당 마크 업을 질문에 추가 할 수있는 경우 SqlDataSource1을 정의하는 ASPX 코드에 있습니다. – Steve

+0

해당 데이터 소스에 대한 선택 명령은 무엇입니까? –

+1

OleDb 매개 변수에는 이름이 있습니까? 그들은 단지 자리 표시 자 (?)가 아닌가? –

답변

2

업데이트를 기반으로 올바른 일을하는 데 아주 가까워 졌을 것으로 생각됩니다. 주요 문제는 쿼리에서 명명 된 매개 변수를 지원하지 않는 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; 
} 

주 몇 가지 : 쿼리에

  • 매개 변수 단지 인 '?'. 이들은 위치 적입니다. 나중에 정의하는 매개 변수에 따라 순서가 바뀝니다.
  • SelectParameters 컬렉션에는 쿼리에 '?'가있는 것과 동일한 순서로 같은 수의 항목이 있습니다. 자리 표시 자. 이 경우에는 하나 뿐이지 만 여러 매개 변수가있는 경우 순서대로 정의해야합니다. 동일한 값을 여러 번 사용하려면 여러 매개 변수를 지정하고 모두 개별적으로 설정해야합니다.
  • 컬렉션에서 매개 변수를 조회하는 데 사용하는 이름은 SelectParameters 컬렉션에 지정한 이름이며 "@"이 추가됩니다.
  • 필자가 아는 한, 이어야하며이를 수행 할 때 올바른 매개 변수 유형을 지정해야합니다. 나는 적어도 항상 가지고 있고, 그것은 "나를 위해 일했다".

어떤 점에서 이와 비슷한 방법을 시도해 보았지만 시도한 모든 코드 반복을 보지 못했지만 확신 할 수 없습니다. 여하튼, 이것은 OLE DB 매개 변수화 된 쿼리가 작동하는 방식이므로 필요한 것이어야합니다. 그렇지 않은 경우 질문을이 문제를 해결 한 결과로 업데이트하십시오. 자세한 내용은

은 다음을 참조하십시오

http://msdn.microsoft.com/enus/library/vstudio/z72eefad(v=vs.100).aspx

+0

답변 해 주셔서 대단히 감사합니다. 이 정보는 내 두꺼운 두개골을 통해 천천히 진행되고 있습니다. 예, 어느 시점에서 이런 식으로 시도했지만, 너무 좌절감을 느꼈습니다. 생각할 수있는 모든 것을 시도했기 때문에 간과 할 수있는 세부 사항을 말하지 않았습니다. 나는 내가 아주 가깝다고 믿는다. 나는 이것으로 돌아와 그것을 알아낼 것이다. 시간이 없으므로 이전 서버로 변경해야만 기존 코드를 사용하여 신속하게 처리 할 수있었습니다. 물론 SQLParameters에서도 잘 작동합니다. 다시 한 번 감사드립니다. 저는 이것을 답으로 표시 할 것입니다. –

관련 문제