संपादित: यह प्रकट होता है कि यदि आप GridView पर AutoGenerateColumns = "true" का उपयोग करें और SQLDataSource के माध्यम से पॉप्युलेट, यह स्वतः ही नियंत्रण के मूल्यों नाम से SQL क्वेरी में उचित मानकों के लिए कोई अतिरिक्त बिना बाँध होगा कोड। । फिर भी, हम, GetInsertCommand(true)
, आदि का उपयोग करने के लिए इतना है कि आदेशों स्तंभ नाम का उपयोग करें (जहाँ मैं SqlCommandBuilder
उपयोग करने के लिए कैसे कुछ gotchas रहे हैं दिखाने के लिए नीचे दिए गए कोड को देखने के लिए है लेकिन जैसा कि मैंने परीक्षण में पता चला है:
- आप अपने GridView की
DataKeyNames
निर्धारित करने की आवश्यकता
- आप अपने sqlDS पर
OldValuesParameterFormatString="Original_{0}"
स्थापित करने के लिए
- आप पर
scb.ConflictOption = System.Data.ConflictOption.OverwriteChanges;
की आवश्यकता होगी की आवश्यकता होगी। अपने SqlCommandBuilder
तुम सिर्फ पुराने मूल्यों की तुलना के बिना अद्यतन करने के लिए चाहते हैं।
- यह ऐसा लगता है कि यदि आप चुन रहे हैं/अद्यतन/हटाएं प्रोग्रामिंग के रूप में एक SQLDataSource पर eCommand, आपको इसे प्रत्येक पोस्टबैक पर करना होगा।
हालांकि, मामले में आप अनुकूलित करने के लिए की जरूरत है, SqlDataSource
नियंत्रण घटनाओं Inserting
, Updating
, प्रदान करता है Deleting
कि आप एसक्यूएल कार्यों डेटाबेस पर लिया जाता है से पहले पैरामीटर भरे जा करने के लिए उपयोग कर सकते हैं:
sqlDS.Updating += new SqlDataSourceCommandEventHandler(sqlDS_Updating);
protected void sqlDS_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@Name"].Value = // retrieve value from user entry
}
एक्सेस के माध्यम से Inserting
और Deleting
ईवेंट में एक ही तरह की चीज की जा सकती है।
नोट ताकि आप अपनी टेबल के सभी युक्त एक विशाल स्विच बयान का निर्माण करने की जरूरत नहीं है कि आप भी उचित हटाएँ/सम्मिलित करें/अद्यतन आदेश उत्पन्न स्वचालित रूप से SqlCommandBuilder
वर्ग का उपयोग कर सकते हैं। यहाँ एक उदाहरण है:
string tableName = ddl.SelectedValue;
string connectionString = ConfigurationManager
.ConnectionStrings["MyConnectionString"].ConnectionString;
string select = "SELECT * FROM [" + tableName + "]";
SqlDataAdapter sda = new SqlDataAdapter(select, connection);
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sqlDS.SelectCommand = select;
sqlDS.InsertCommand = scb.GetInsertCommand(true).CommandText;
sqlDS.UpdateCommand = scb.GetUpdateCommand(true).CommandText;
sqlDS.DeleteCommand = scb.GetDeleteCommand(true).CommandText;
निश्चित रूप से यह इच्छा के अनुसार, आपके टेबल के सभी प्राथमिक कुंजी है कि बयान प्रासंगिक अद्यतन पैदा करते हैं और नष्ट करने के लिए इस्तेमाल किया जा सकता है। यदि नहीं, तो आपको गतिशील एसक्यूएल पीढ़ी के बारे में अपवाद मिलेगा। यहां तक कि यदि आपको डेटाबेस इंजन पर स्कीमा को देखने की रन-टाइम लागत की वजह से इस विधि को पसंद नहीं है, तो आप उन्हें सभी को हाथ में टाइप करने के बजाय हमेशा टी 4 टेम्पलेट के साथ प्री-जेनरेट कर सकते हैं।
एक अंतर्निहित टेम्पलेट है जिसे डायनामिक डेटा कहा जाता है जो एएसपी के साथ आता है।नेट-ऑफ-द-बॉक्स जो सामान्य रूप से डेटा स्रोत में किसी भी तालिका से रिकॉर्ड्स को देखने, अपडेट करने, संपादित करने और हटाने की क्षमता प्रदान करता है। आप अलग-अलग पृष्ठों, व्यक्तिगत कार्यों, फ़ील्ड प्रकार इत्यादि को भी अनुकूलित कर सकते हैं। यहां अधिक जानकारी देखें: http://msdn.microsoft.com/en-us/library/ee845452(v=VS.100).aspx – mellamokb
क्या आपने विचार किया है 'LinqDataSource' और LINQ-To-SQL/आदि का उपयोग कर। अपने डेटाबेस के साथ काम करने के लिए? यह बहुत आसान हो सकता है क्योंकि यह स्वचालित रूप से चयन/आवेषण/अपडेट के लिए नलसाजी को संभालता है। – mellamokb
भले ही आप डायनामिक डेटा का उपयोग न करें, फिर भी कुछ स्रोत कोड की समीक्षा करना एक बुरा विचार नहीं हो सकता है कि यह कैसे विचार करता है कि आपके कोड को सरल कैसे बनाएं और SQL कथन उत्पन्न करने के लिए अंतर्निहित टूल का लाभ उठाएं , इत्यादि। इस तरह की चीज कई बार पहले की गई है, और इस पर निर्भर करते हुए कि आप इसके बारे में कैसे जाते हैं, इसके बारे में बहुत आसान और कठिन तरीके हैं। – mellamokb