मुझे पता है कि इस प्रकार के प्रश्न को SO पर कम से कम एक दर्जन बार पूछा गया है, लेकिन मैं पिछले सभी प्रश्नों और उत्तरों से गुज़र चुका हूं जो मुझे यहां मिल सकता है और कोई भी नहीं मुझे आवेदन मिला है। मैं अपने पेज पर कई फॉर्म व्यू ऑब्जेक्ट्स का उपयोग कर रहा हूं और अब उनमें से एक को संपादित करने के लिए विकल्प जोड़ना चाहता हूं। 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 post पर आया जो संदर्भित this site (archive.org पर जाना था क्योंकि मूल नीचे प्रतीत होता है)। मैंने पैरामीटर को trace
फ़ंक्शन में जोड़ने के लिए सुझाए गए सुझावों को लागू किया। जो मैंने पाया वह था कि मेरी संग्रहीत प्रक्रिया में, चुनिंदा प्रक्रिया में कुछ "लुकअप" मान हैं जो अद्यतन प्रक्रिया में नहीं हैं। जिस तालिका में मैं अद्यतन करने की कोशिश कर रहा हूं केवल टेस्टर की आईडी है, लेकिन उपयोगकर्ता अपना नाम भी देखना चाहते हैं, इसलिए यह उस तालिका का संदर्भ देता है, लेकिन फॉर्म व्यू में उन फ़ील्ड केवल संपादन मोड के दौरान पढ़े जाते हैं ताकि वे कर सकें इसे बदलने की कोशिश नहीं है। अन्य सभी पैरामीटर लाइन अप ... केवल वे लुकअप मान बंद हैं।
मैंने सोचा कि पैरामीटर की विशिष्ट सूची को शामिल करने के लिए यह केवल उन पैरामीटर का उपयोग करेगा, लेकिन यह गलत प्रतीत होता है। अब मैं स्टंप हो गया हूं क्योंकि मैंने पहले से ही पैरामीटर निर्दिष्ट किए हैं, और मैं कहीं भी नहीं देख सकता कि उन्हें चयनित संग्रहित प्रक्रिया से लोगों के साथ ओवरराइट किया जा रहा है। मैं कहां कहूं कि उन पठनीय मूल्यों का उपयोग न करें?
मैं उन्हें मूल संग्रहीत प्रक्रिया से हटाना नहीं चाहता क्योंकि उन्हें उपयोगकर्ताओं द्वारा आवश्यकता होगी। एक कामकाज जो मैंने अभी तक किया है, उन्हें संग्रहीत प्रक्रिया में जोड़ना है और फिर कभी उनका उपयोग नहीं करना है। हालांकि मैं काफी हद तक निश्चित हूं कि यह काम करेगा, यह इसे ठीक करने के बजाय समस्या को कवर करना बहुत अधिक है।
संपादित करें: अतिरिक्त कोड, प्रति अनुरोध
इस विधि कि 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
क्या आपने जांच की है कि क्या कोई वर्तनी त्रुटियां या डेटा प्रकार रूपांतरण त्रुटि है? –
@ रुचीराहुल दोशी हां। मैंने Excel में पैरामीटर के दोनों सेटों की प्रतिलिपि बनाई और लाइन तुलना करके लाइन चला गया। यहां इस सब-आम प्रश्न में यह सबसे आम समस्या थी, इसलिए मैं यह सुनिश्चित करने के लिए बहुत सावधान था कि वे सटीक थे। सभी मार्गों को पारित करने के लिए 'ट्रेस' का उपयोग करने के बाद, मैं यह सुनिश्चित कर सकता हूं कि यह वास्तव में बहुत से तर्क पारित कर रहा है, लेकिन मुझे नहीं पता कि इसे कैसे बंद किया जाए। – techturtle
यदि आप दिमाग में नहीं हैं तो कृपया अपना "usp_UpdateTest" और "TestSqlDataSource_Updating" पेस्ट करें। –