이 질문 유형은 적어도 12 번 이상 요구되었지만 이전 질문과 대답을 모두 찾아 보았습니다. 신청서를 찾았습니다. 내 페이지에서 여러 FormView 개체를 사용하고 있으며 이제 해당 옵션 중 하나를 편집하는 옵션을 추가하려고합니다. FormView는 저장 프로 시저에 링크의 SqlDataSource 채워, 그래서 레코드를 업데이트하는 저장 프로 시저를 만들어 지금처럼 보이는 SqlDataSource와,에 추가됩니다프로 시저 또는 함수 'xyz'에 지정된 인수가 너무 많습니다.
<asp:SqlDataSource ID="TestSqlDataSource" runat="server"
SelectCommandType="StoredProcedure"
ConnectionString="<%$ ConnectionStrings:development %>"
SelectCommand="usp_GetNewTestDetails"
UpdateCommand="usp_UpdateTest"
UpdateCommandType="StoredProcedure"
onupdating="TestSqlDataSource_Updating">
<SelectParameters>
<asp:SessionParameter SessionField="TestID" Name="TestID"/>
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="testId" Type="Int32"/>
<asp:Parameter Name="testerLicense" Type="Int32" />
<asp:Parameter Name="premiseOwner" Type="String" />
<asp:Parameter Name="premiseAddress" Type="String" />
<asp:Parameter Name="premiseCity" Type="String" />
<asp:Parameter Name="premiseState" Type="String" />
<asp:Parameter Name="premiseZip" Type="String" />
<asp:Parameter Name="protectionType" Type="String" />
<asp:Parameter Name="testType" Type="String" />
<asp:Parameter Name="repairs" Type="String" />
<asp:Parameter Name="notes" Type="String" />
<asp:Parameter Name="testDate" Type="DateTime" />
<asp:Parameter Name="employerName" Type="String" />
<asp:Parameter Name="employerAddress" Type="String" />
<asp:Parameter Name="phoneNumber" Type="String" />
<asp:Parameter Name="emailAddress" Type="String" />
<asp:Parameter Name="dataEntryName" Type="String" />
<asp:Parameter Name="dataEntryPhone" Type="String" />
<asp:Parameter Name="signature" Type="String" />
<asp:Parameter Name="entryDate" Type="DateTime" />
</UpdateParameters>
</asp:SqlDataSource>
나는 레코드를 업데이트하려고, 내 검색어에 너무 많은 매개 변수가 있다는 오류가 표시됩니다. 나는 트리플에서 내 코드의 매개 변수가 내 저장 프로 시저의 매개 변수와 정확히 일치하는지 (이름, 번호 및 순서)를 확인했다.
대답을 찾으려고 시도 할 때 this site (원본이 다운 된 것으로 보였으므로 archive.org로 이동해야 함)이라고 표시된 this post을 발견했습니다. trace
함수에 매개 변수를 추가하기 위해 제안한 내용을 적용했습니다. 내가 찾은 것은 저장 프로 시저에서 select 프로 시저의 업데이트 절차에없는 몇 가지 "조회"값이 있다는 것입니다. 필자가 업데이트하려고하는 테이블은 테스터의 ID 만 가지고 있지만 사용자가 이름을보고 싶어하므로 테이블을 참조하지만 FormView에서 해당 필드는 편집 모드에서 읽기 전용이므로 수행 할 수 있습니다. 그것을 바꾸려고하지 마라. 다른 모든 매개 변수는 정렬됩니다 ... 해당 조회 값만 해제됩니다.
필자는 매개 변수의 특정 목록을 포함하여 해당 매개 변수 만 사용 하겠지만 잘못된 것으로 보인다고 생각했습니다. 이제는 매개 변수를 이미 지정했기 때문에 난처한 상황에 처하게되고 선택 저장 프로 시저의 매개 변수로 덮어 쓰지 않는 곳을 볼 수 없습니다. 읽기 전용 값을 사용하지 말라고 어디에서 말합니까?
사용자가 필요하기 때문에 원래 저장 프로 시저에서 제거하지 않으려합니다. 지금까지 나와있는 한 가지 해결 방법은 저장 프로 시저에 추가 한 다음 사용하지 않는 것입니다. 이 방법이 효과가있을 것이라고 확신 할지라도 문제를 해결하는 것이 아니라 문제를 해결하는 것입니다.
EDIT : 추가 코드, 이것은 trace
함수에 파라미터를 출력하는 방법으로 요청
당 :
protected void TestSqlDataSource_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
for (int i = 0; i < e.Command.Parameters.Count; i++)
{
Trace.Write(e.Command.Parameters[i].ParameterName);
if (e.Command.Parameters[i].Value != null)
{
Trace.Write(e.Command.Parameters[i].Value.ToString());
}
}
}
이 사용되는 저장 절차는 업데이트 중 :
ALTER PROCEDURE [dbo].[usp_UpdateTest]
@testId INT ,
@testerLicense INT ,
@premiseOwner VARCHAR(50) ,
@premiseAddress VARCHAR(150) ,
@premiseCity VARCHAR(50) ,
@premiseState VARCHAR(2) ,
@premiseZip VARCHAR(10) ,
@protectionType VARCHAR(11) ,
@testType VARCHAR(2) ,
@repairs VARCHAR(200) ,
@notes VARCHAR(300) ,
@testDate DATETIME ,
@employerName VARCHAR(50) ,
@employerAddress VARCHAR(150) ,
@phoneNumber VARCHAR(25) ,
@emailAddress VARCHAR(60) ,
@dataEntryName VARCHAR(50) ,
@dataEntryPhone VARCHAR(25) ,
@signature VARCHAR(50) ,
@entryDate DATETIME
AS
BEGIN
SET NOCOUNT ON;
UPDATE dbo.Tests
SET TesterLicense = @testerLicense ,
PremiseOwner = @premiseOwner ,
PremiseAddress = @premiseAddress ,
PremiseCity = @premiseCity ,
PremiseState = @premiseState ,
PremiseZip = @premiseZip ,
ProtectionType = @protectionType ,
TestType = @testType ,
Repairs = @repairs ,
Notes = @notes ,
TestDate = @testDate ,
EmployerName = @employerName ,
EmployerAddress = @employerAddress ,
PhoneNumber = @phoneNumber ,
EmailAddress = @emailAddress ,
DataEntryName = @dataEntryName ,
DataEntryPhone = @dataEntryPhone ,
Signature = @signature ,
EntryDate = @entryDate
WHERE TestID = @testId
END
맞춤법 오류나 데이터 유형 변환 오류가 있는지 확인 했습니까? –
@RuchiRahulDoshi 예. 두 매개 변수 집합을 Excel로 복사 한 다음 줄 단위로 비교했습니다. 이 질문은 여기에있는 일반적인 질문에서 가장 일반적인 문제 였으므로 정확한지 확실히하기 위해 매우 신중했습니다. 전달하는 모든 매개 변수를 표시하는 데'trace '를 사용했기 때문에 실제로 너무 많은 인수를 전달하고 있는지 확인할 수 있지만 해제하는 방법을 모르겠습니다. – techturtle
마음에 들지 않으면 "usp_UpdateTest"및 "TestSqlDataSource_Updating"을 여기에 붙여주십시오. –