2013-08-29 2 views
0

이것은 나를 미치게합니다. 그리고 지금은별로 중요하지 않더라도, 무슨 일이 일어나고 있는지 알고 싶습니다. 매개 변수 예외 선택

는 ClientSelect라는 저장 프로 시저가 한 I :

SELECT * FROM dbo.Client 

모든 것을 (! 내가 시도하고 무슨 일이 일어나고 있는지 알아 내기 위해 바로 다시 제거했습니다)

나는 또한이 그 안에 있다고 GridView가있는 ASP.NET 페이지. 그것의 데이터 소스는 다음과 같습니다 SelectCommand에이 SelectParameter에 대한 참조를하지 않고, 저장 프로 시저가 매개 변수를 요구하지 않는

<asp:SqlDataSource ID="SQLClient" runat="server" 
     ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" 
     SelectCommand="EXEC ClientSelect" > 
     <SelectParameters> 
      <asp:Parameter Name="ClientID" Type="Int32" /> 
     </SelectParameters> 
</asp:SqlDataSource> 

참고. 이 페이지가로드되지만 GridView가 비어 있습니다. 데이터가 반환되지 않습니다. 그것은 테이블의 모든 레코드를 반환

<asp:Parameter Name="ClientID" Type="Int32" DefaultValue="1" /> 

(지정된 기본 값으로 필터링하지 않음) : 나는 완전히 SelectParameter을 제거하거나 디폴트 값을 추가하는 경우

는 그러나처럼 보이도록.

SelectCommand 또는 저장 프로 시저에서 데이터를 참조하지 않아도 SelectParameter의 명시적인 코딩이 반환되지 않는 이유는 무엇입니까? 그것은 나에게 이해가되지 않는다!

답변

0

시도해주세요. 그것은 예외를 throw합니다 -

<asp:SqlDataSource ID="SQLClient" runat="server" 
     ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" 
     SelectCommand="ClientSelect" SelectCommandType="StoredProcedure" > 
     <SelectParameters> 
      <asp:Parameter Name="ClientID" Type="Int32" /> 
     </SelectParameters> 
</asp:SqlDataSource> 
0

글쎄, 내가 ASP.NET에 대한 전문 아니지만, 난 당신의 SP는 매개 변수가없는 경우,하지만 여전히 당신은 쿼리를 지정하는 것이, 참조 이런 종류의 예외 (SQL SERVER)를 해제하지 않는 한.

게다가 매개 변수가 지정되었지만 값이 적용되지 않으면 일반적으로 SQL Server에 액세스하는 드라이버가 T-SQL 코드로 변환하기 때문에 오류가 발생합니다. 그래서 처음에 당신이 얻을 것이다 :

EXEC ClientSelect @ ClietntId =

그리고 다음 하나는 그

괜찮 EXEC ClientSelect @ ClietntId = 1

. 글쎄, 사람들은 매개 변수가 존재하지 않는다고 말하면 무시됩니다. DefaultValue가 있어야합니다. 그렇지 않으면 @Dhaval이 코드를 제안하고 피드백을 제안하는 것이 좋습니다.

0

정의 된 매개 변수의 실제 값을 가져 오는 방법을 지정해야한다고 생각합니다.

예 : 당신이 세션 변수에서 매개 변수 값을 얻는 경우에 당신은 당신의 SelectParameter를 정의 할 필요가 같은

<!-- To get ClientID from a session variable called myClientId --> 
<asp:SessionParameter Name="ClientID" DbType="Int16" 
         DefaultValue="0" SessionField="myClientId"/> 

<!-- To Get ClientID from a dropdown List called ddlClients --> 
<asp:ControlParameter Name="ClientID" DbType="Int16" 
         DefaultValue="0" ControlID="ddlClients"/> 


<!-- YOUR CODE --> 
<asp:SqlDataSource ID="SQLClient" runat="server" 
     ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" 
     SelectCommand="ClientSelect" SelectCommandType="StoredProcedure" > 
     <SelectParameters> 
      <!-- Add correct parameter type as appropriate --> 
     </SelectParameters> 
</asp:SqlDataSource> 
SelectCommandType 값을 떠나기에 대한
+0

좋은 점은 - 그것이에는 영향을주지 않았지만 나는 지금 그것을 추가 한 행동. 내 예제 코드가 인공적인 예제로 고통 받고 있지만 데이터 컨트롤 (예 : FormView) 내의 컨트롤이 해당 이름의 필드에 바인딩되어 있으면 쿼리 문자열이나 세션 변수에서 매개 변수를 지정하지 않을 것입니다. 이게 진짜 페이지라면 나도 마찬가지야.그런 다음 다시 그런 바인딩 된 컨트롤이 있다면 필자는 필연적으로 기본 값이되므로 아마 작동 할 것입니다. –

+0

실제로 나는이 예외가 결코 실제로 자르지 않을 것이라고 추측합니다. 그러나 나는 단지 더미 페이지를 가지고 놀고 있었기 때문에 왜 그런지 궁금했습니다. –

+0

조금 이상했지만, 나는 'SelectCommandType'을 정의하거나'SelectCommand = "EXEC spName"을 정의하지 않고 그 효과를 확신하지 못했습니다. 그래서 나는 그것을 제거했다 .. – Kaf