बाधाओं को सक्षम करने में विफल। एक या अधिक पंक्तियों में गैर-अशक्त, अद्वितीय, या विदेशी-कुंजी बाधाओं का उल्लंघन करने वाले मूल्य होते हैं


168

मैं बाहरी रूप से जुड़ता हूं और informixडेटाबेस में सफलतापूर्वक निष्पादित होता हूं लेकिन मुझे अपने कोड में निम्नलिखित अपवाद मिलते हैं:

DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat);

बाधाओं को सक्षम करने में विफल। एक या अधिक पंक्तियों में गैर-अशक्त, अद्वितीय, या विदेशी-कुंजी बाधाओं का उल्लंघन करने वाले मूल्य होते हैं।

मुझे समस्या पता है, लेकिन मुझे नहीं पता कि इसे कैसे ठीक किया जाए।

दूसरी तालिका जो मैं बाहरी जुड़ता हूं उसमें एक संयुक्त प्राथमिक कुंजी होती है जो पिछले बाहरी जुड़ाव क्वेरी में शून्य होती हैं।

संपादित करें:

    SELECT UNIQUE a.crs_e,  a.crs_e  || '/ ' || a.crst crs_name, b.period,
           b.crscls, c.crsday, c.from_lect, c.to_lect,
           c.to_lect - c.from_lect + 1 Subtraction, c.lect_kind, e.eval, e.batch_no,
           e.crsnum, e.lect_code, e.prof_course
    FROM rlm1course a, rfc14crsgrp b, ckj1table c, mnltablelectev d,
         OUTER(cc1assiscrseval e)  
    WHERE a.crsnum = b.crsnum 
    AND b.crsnum = c.crsnum 
    AND b.crscls = c.crscls 
    AND b.batch_no = c.batch_no 
    AND c.serial_key = d.serial_key  
    AND c.crsnum = e.crsnum  
    AND c.batch_no = e.batch_no  
    AND d.lect_code= e.lect_code 
    AND d.lect_code = .... 
    AND b.batch_no = ....

समस्या तालिका के साथ होती है cc1assiscrseval। प्राथमिक कुंजी है (बैच_नो, क्रॉसम, लेक्चर_कोड)।

इस समस्या से कैसे निपटा जाए?


संपादित करें:

@PaulStockसलाह के अनुसार : मैं वही करता हूँ जो उसने कहा था, और मुझे मिलता है:

? dt.GetErrors () [0] {System.Data.DataRow} HasErrors: true ItemArray: {object [10]} RowError: "Column 'eval''BNull.Value 'की अनुमति नहीं देता है।"

तो मैं बदल कर मेरी समस्या का समाधान e.evalकरने के लिए, NVL (e.eval,'') evalमेरी समस्या .और इस हल करता है। बहुत बहुत धन्यवाद।


जब मैं ,e.eval,e.batch_no,e.crsnum,e.lect_code,e.prof_courseक्वेरी से हटाता हूं तो हर चीज ठीक हो जाती है। कृपया समस्या क्या है
अन्नोन डोनॉटकेयर

ADO.NET में एक बग भी है जहां एक "गैर-अद्वितीय क्लस्टर इंडेक्स" एक गलत डेटा बनाएगा। DataTable पर UniqueConstraint आइटम।
ब्रेन2000

जवाबों:


352

यह समस्या आमतौर पर निम्न में से किसी एक के कारण होती है

  • AllowDBNull पर सेट नहीं किए गए स्तंभों के लिए दिए जा रहे अशक्त मान
  • डुप्लीकेट पंक्तियों को उसी प्राथमिक कुंजी के साथ वापस किया जा रहा है।
  • डेटाबेस और डेटासेट के बीच कॉलम परिभाषा (जैसे चार क्षेत्रों का आकार) में एक बेमेल

अपनी क्वेरी को मूल रूप से चलाने का प्रयास करें और परिणाम देखें, यदि परिणाम बहुत बड़ा नहीं है। यदि आपने शून्य मानों को समाप्त कर दिया है, तो मेरा अनुमान है कि प्राथमिक कुंजी स्तंभों को डुप्लिकेट किया जा रहा है।

या, सटीक त्रुटि देखने के लिए, आप मैन्युअल रूप से जनरेट किए गए कोड में आज़माएँ / कैच ब्लॉक को जोड़ सकते हैं, जैसे कि अपवाद होने पर तोड़ना।

यहां छवि विवरण दर्ज करें

फिर कमांड विंडो के भीतर, GetErrorsत्रुटि प्राप्त करने वाली तालिका पर कॉल विधि।
C # के लिए, कमांड ? dataTable.GetErrors()
VB के लिए होगी , कमांड है? dataTable.GetErrors

यहां छवि विवरण दर्ज करें

यह आपको उन सभी डेटारो को दिखाएगा जिनकी त्रुटि है। आप RowErrorइनमें से प्रत्येक के लिए देख सकते हैं , जो आपको समस्या के साथ-साथ अमान्य कॉलम को बताना चाहिए। तो, पहले डेटारो की गलती को देखने के लिए कमांड है:
? dataTable.GetErrors(0).RowError
या C # में? dataTable.GetErrors()[0].RowError

यहां छवि विवरण दर्ज करें


4
बहुत बहुत धन्यवाद । >? dt.GetErrors()[0] {System.Data.DataRow} HasErrors: true ItemArray: {object[10]} RowError: "Column 'eval' does not allow DBNull.Value."
आयनम डोनॉटकेयर

4
बहुत बढ़िया। यह काम नहीं किया, लेकिन मैं डेटासेट और टाइप के लिए एक घड़ी जोड़ सकता हूँ। इसके बाद गीताकार और मानों का विस्तार करें। यह अत्यंत उपयोगी है। उम्मीद है कि अगली बार जब मुझे इसकी आवश्यकता होगी तो मैं इसे नहीं
भूलूंगा

6
हां यह वास्तव में मददगार था - मेरी त्रुटि का कारण तालिका एडेप्टर में कॉलम की अधिकतम लंबाई की तुलना में क्षेत्र की लंबाई थी। एक बात जो मैंने नोटिस की थी कि डिज़ाइनर फ़ाइल में ब्रेकपॉइंट को हिट करने के लिए, आपको टूल्स> विकल्प> डिबगिंग पर जाना होगा, और यह सुनिश्चित करना होगा कि "बस मेरे कोड को सक्षम करें" अनियंत्रित है। यह तब आपको डिज़ाइनर फ़ाइल कोड के माध्यम से कदम रखने की अनुमति देगा।
ई-ऑन

1
धन्यवाद @PaStStock आपके उत्तर के लिए मुझे मेरी समस्या का हल मिल गया।
उदय

1
यह बेहद उपयोगी था, मुझे डेटा कॉलम की लंबाई के बीच एक बेमेल मिला - यह डेटाबेस में बढ़ाया गया था और डेटासेट में नहीं।
रोब

38

आप डेटासेट पर बाधाओं को अक्षम कर सकते हैं। यह आपको खराब डेटा की पहचान करने और समस्या को हल करने में मदद करेगा।

जैसे

dataset.TableA.Clear();
dataset.EnforceConstraints = false;
dataAdapter1.daTableA.Fill(dataset, TableA");

भरण विधि आपके लिए थोड़ी भिन्न हो सकती है।


1
इससे मुझे अपनी समस्या के कारण डेटा खोजने में मदद मिली, जो "खराब डेटा" नहीं था, बल्कि डेटा स्रोत कॉन्फ़िगरेशन विज़ार्ड का बुरा व्यवहार था। यह स्पष्ट रूप से संशोधित नहीं हो रहा है कॉलम की कमी (और मैं बूट करने के लिए एक अतिरिक्त तालिका याद कर रहा हूं), बाहर जाने और डीबी से बात करने के बावजूद ... और कैश सक्षम नहीं होने के साथ।
किलेबंदी

इस उत्तर के लिए धन्यवाद। मुझे केस सेंसिटिव प्रॉब्लम थी और इसे डेटासैट में उचित रूप से सेट करने की जरूरत थी।
दान

10

यह तालिका में सभी पंक्तियाँ होंगी जिनमें त्रुटियाँ हैं, पंक्ति की प्राथमिक कुंजी और उस पंक्ति पर हुई त्रुटि का प्रिंट आउट लें ...

यह C # में है, लेकिन इसे VB में बदलना कठिन नहीं होना चाहिए।

 foreach (DataRow dr in dataTable)
 {
   if (dr.HasErrors)
     {
        Debug.Write("Row ");
        foreach (DataColumn dc in dataTable.PKColumns)
          Debug.Write(dc.ColumnName + ": '" + dr.ItemArray[dc.Ordinal] + "', ");
        Debug.WriteLine(" has error: " + dr.RowError);
     }
  }

ओह - क्षमा करें PKColumns कुछ है जो मैंने तब जोड़ा जब मैंने DataTable को बढ़ाया जो मुझे उन सभी स्तंभों को बताता है जो DataTable की प्राथमिक कुंजी बनाते हैं। यदि आप अपने डेटा योग्य प्राथमिक कुंजी कॉलम को जानते हैं तो आप उनके माध्यम से यहाँ लूप कर सकते हैं। मेरे मामले में, चूंकि मेरे सभी डेटाटैबल्स को उनके पीके कॉल का पता है इसलिए मैं इन त्रुटियों के लिए डिबग स्वचालित रूप से सभी तालिकाओं के लिए लिख सकता हूं।

आउटपुट इस तरह दिखता है:

Row FIRST_NAME: 'HOMER', LAST_NAME: 'SIMPSON', MIDDLE_NAME: 'J',  has error: Column 'HAIR_COLOR' does not allow DBNull.Value.

यदि आप उपर्युक्त PKColumns अनुभाग के बारे में भ्रमित हैं - यह कॉलम के नाम और मूल्यों को प्रिंट करता है, और आवश्यक नहीं है, लेकिन यह पहचानने में सहायक समस्या निवारण जानकारी जोड़ता है कि कौन से स्तंभ मान समस्या का कारण बन सकते हैं। इस अनुभाग को हटाने और बाकी को रखने से अभी भी उत्पन्न होने वाली SQLite त्रुटि प्रिंट होगी, जो उस कॉलम को नोट करेगी जिसमें समस्या है।


1
यह पता लगाने का शानदार तरीका कि यह गलत कहां हुआ। पूरी तरह से मुझे एक समाधान में मुझे परेशान करने में मदद मिली जो मुझे विरासत में मिला जहां डेटा के साथ विसंगतियां थीं। हालांकि यह एक डेटासेट पर था और मैंने प्रत्येक तालिका के माध्यम से इसे पुन: प्रसारित किया, फिर प्रत्येक पंक्ति। +10 अगर मैं कर सका।
एंडेज

इसने मेरे लिए काम किया। यह एक था Column 'MyColumn' does not allow DBNull.Value, लेकिन यह किसी अन्य तरीके से नहीं दिखाएगा। धन्यवाद :)
एलेक्स

7
  • सुनिश्चित करें कि तालिका एडेप्टर क्वेरी में नामित फ़ील्ड उन क्वेरी से मेल खाती हैं जिन्हें आपने परिभाषित किया है। डीएएल बेमेल की तरह नहीं लगता है। जब आप किसी तालिका में एक नया फ़ील्ड जोड़ते हैं तो यह आमतौर पर आपके sprocs और प्रश्नों के लिए होता है।

  • यदि आपने डेटाबेस में एक varchar फ़ील्ड की लंबाई बदल दी है और XSS फ़ाइल में निहित XML ने इसे नहीं उठाया है, तो XML में फ़ील्ड नाम और विशेषता परिभाषा खोजें और इसे मैन्युअल रूप से बदलें।

  • यदि वे डेटा वापस नहीं किए जा रहे हैं, तो तालिका एडेप्टर में चयनित सूचियों से प्राथमिक कुंजी निकालें।

  • SQL प्रबंधन स्टूडियो में अपनी क्वेरी चलाएँ और सुनिश्चित करें कि डुप्लिकेट रिकॉर्ड वापस नहीं किए जा रहे हैं। डुप्लिकेट रिकॉर्ड डुप्लिकेट प्राथमिक कुंजी उत्पन्न कर सकता है जो इस त्रुटि का कारण होगा।

  • SQL यूनियनों मुसीबत का जादू कर सकते हैं। मैंने दूसरों से पहले 'कृपया एक कर्मचारी का चयन करें' रिकॉर्ड जोड़कर एक टेबल एडॉप्टर को संशोधित किया। अन्य क्षेत्रों के लिए मैंने डमी डेटा प्रदान किया, उदाहरण के लिए, लंबाई एक के तार। DAL ने उस प्रारंभिक रिकॉर्ड से स्कीमा का अनुमान लगाया। 12 की लंबाई के साथ निम्नलिखित रिकॉर्ड विफल रहे।


1
एसओ, बॉब में आपका स्वागत है। मैंने आपका उत्तर (अभी भी समीक्षा में, हालांकि) संपादित किया है। उदाहरण के लिए, हम उत्तर में अभिवादन और हस्ताक्षर नहीं करना पसंद करते हैं (इसे "नोइस" माना जाता है, कृपया FAQ देखें)। आपका नाम और ग्रेवार्ट हमेशा किसी भी तरह से उत्तर से नीचे दिखाई देगा।
क्रिस्टोफर लेटेट

5

यह मेरे लिए काम किया, स्रोत: यहाँ

मेरे पास यह त्रुटि थी और यह DB बाधाओं (कम से कम मेरे मामले में) से संबंधित नहीं था। मेरे पास GetRecord क्वेरी के साथ एक .xsd फ़ाइल है जो रिकॉर्ड्स का एक समूह लौटाती है। उस तालिका के स्तंभों में से एक "nvarchar (512)" था और परियोजना के बीच में मुझे इसे "nvarchar (MAX)" में बदलने की आवश्यकता थी।

जब तक उपयोगकर्ता उस फ़ील्ड पर 512 से अधिक दर्ज नहीं करता, तब तक सब कुछ ठीक रहता है और हमें प्रसिद्ध त्रुटि संदेश मिलना शुरू हो जाता है "बाधाओं को सक्षम करने में विफल। एक या अधिक पंक्तियों में गैर-अशक्त, अद्वितीय या विदेशी-कुंजी बाधाओं का उल्लंघन करने वाले मान होते हैं।"

समाधान: अपने DataTable में कॉलम की सभी MaxLength संपत्ति की जाँच करें।

वह कॉलम जिसे मैंने "nvarchar (512)" से "nvarchar (MAX)" में बदल दिया था, अभी भी MaxLength संपत्ति पर 512 मान था इसलिए मैं "-1" में बदल गया और यह काम करता है !!।


मेरा मुद्दा मैक्सवेल के समान रहा होगा। मैं VWD 2010 डेटासेट डिज़ाइनर का उपयोग करता हूं। स्रोत तालिका को किसी और ने बदल दिया था। मैंने SQL क्वेरी को संशोधित किया select *, यह सोचकर कि सभी कॉलम ताज़ा होंगे, लेकिन जाहिर है कि यह मौजूदा लंबाई को अपडेट नहीं करता है। इसलिए मैंने एक फ़ील्ड का चयन करने के लिए क्वेरी को संशोधित किया, .xsd को सहेजा, .xsd को नोटपैड ++ में खोला, ताकि यह जांचा जा सके कि सभी में से एक मैक्सलेंथ डिफेक्ट गया था, फिर क्वेरी को फिर से संशोधित किया select *। कि MaxLengths को फिर से ताज़ा किया और मुझे इस त्रुटि से पिछले किया।
मार्क बेरी

बहुत बहुत धन्यवाद, मैं एक दिन इस पर अपना सिर खुजला रहा हूं क्योंकि सब कुछ ठीक हो रहा था। मुझे भी nvarchar (MAX) में बदलना था, लेकिन DataTable ने 10 में MaxLength रखी थी! मैं तुम्हें एक पेय देना है!
जॉन डी।

4

समस्या डेटा एक्सेस डिजाइनर के साथ है। विज़ुअल स्टूडियो में, जब हम डिज़ाइनर विंडो में "सर्वर एक्सप्लोरर" से एक दृश्य खींचते हैं, तो यह स्तंभ पर प्राथमिक कुंजी को बेतरतीब ढंग से जोड़ रहा होता है या किसी नॉट NULL को कुछ चिह्नित करता है हालांकि यह वास्तव में अशक्त है। हालाँकि SQL db सर्वर में वास्तविक दृश्य निर्माण, कोई प्राथमिक कुंजी परिभाषित नहीं है या नहीं नल परिभाषित है, VS डिज़ाइनर इस कुंजी / बाधा को जोड़ रहा है।

आप इसे डिजाइनर में देख सकते हैं - यह कॉलम नाम के बाईं ओर एक कुंजी आइकन के साथ दिखाया गया है।

समाधान: कुंजी आइकन पर राइट क्लिक करें और 'डिलीट की' चुनें। इससे समस्या हल हो जानी चाहिए। आप वीएस डेटा एक्सेस डिजाइनर में एक कॉलम के गुणों की सूची देखने और उचित रूप से मूल्यों को बदलने के लिए एक कॉलम पर राइट क्लिक भी कर सकते हैं और "गुण" का चयन कर सकते हैं।


3

यह त्रुटि मेरे प्रोजेक्ट में भी दिख रही थी। मैंने यहां पोस्ट किए गए सभी प्रस्तावित समाधानों की कोशिश की, लेकिन कोई भी भाग्य नहीं है क्योंकि समस्या का खेतों के आकार, तालिका के प्रमुख क्षेत्रों की परिभाषा, बाधाओं या EnforceConstraints डेटासेट चर के साथ कुछ नहीं करना था।

मेरे मामले में मेरे पास एक .xsd ऑब्जेक्ट भी है जिसे मैंने प्रोजेक्ट डिजाइन समय (डेटा एक्सेस लेयर) के दौरान वहां रखा था। जैसे ही आप अपने डेटाबेस टेबल ऑब्जेक्ट्स को डेटासेट विजुअल आइटम में खींचते हैं, यह अंतर्निहित डेटाबेस से प्रत्येक टेबल परिभाषा को पढ़ता है और डेटासेट ऑब्जेक्ट में बाधाओं को ठीक उसी तरह कॉपी करता है जैसा आपने अपने डेटाबेस में टेबल बनाते समय परिभाषित किया था (SQL Server 2008 R2 in my मामला)। इसका मतलब यह है कि "नहीं नल" या "विदेशी कुंजी" की कमी के साथ बनाया गया प्रत्येक टेबल कॉलम आपके SQL स्टेटमेंट या संग्रहीत कार्यविधि के परिणाम में भी मौजूद होना चाहिए।

जब मैंने सभी कुंजी स्तंभों को शामिल किया और मेरे प्रश्नों में "शून्य नहीं" के रूप में परिभाषित किए गए कॉलम पूरी तरह से गायब हो गए।


3

जब मैंने AllowDBNullxsd फ़ाइल में डेटा तालिका पर दिनांक फ़ील्ड पर True पर सेट किया तो मेरा काम शुरू हो गया ।


2

ऐसा लगता है कि संभवतः एक या अधिक स्तंभों का चयन किया जा रहा है:

   e.eval, e.batch_no, e.crsnum, e.lect_code, e.prof_course

है AllowDBNull को सेट झूठी अपने डेटासेट defintion में।


मैंने इस तालिका में सभी स्तंभों के लिए अशक्त = सत्य की अनुमति दी है लेकिन व्यर्थ है।
आयनम डोनॉटकेयर

2

यह स्पष्ट नहीं है कि एक SELECT स्टेटमेंट को चलाने के लिए बाधाओं को सक्षम करना क्यों शामिल होना चाहिए। मैं C # या संबंधित तकनीकों को नहीं जानता, लेकिन मैं Informix डेटाबेस को जानता हूं। यदि सिस्टम आपके क्वेरी कोड को सक्षम कर रहा है (और संभवत: अक्षम भी) बाधाओं को लेकर कुछ अजीब चल रहा है।

आपको पुराने जमाने के, गैर-मानक इनफॉर्मिक्स OUTER जॉइन नोटेशन से भी बचना चाहिए। जब तक आप Informix के एक पुराने संस्करण का उपयोग नहीं कर रहे हैं, तब तक आपको SQL-92 शैली की जॉइन का उपयोग करना चाहिए।

आपके प्रश्न में दो बाहरी जुड़ावों का उल्लेख है, लेकिन आप केवल उदाहरण क्वेरी में एक दिखाते हैं। वह भी थोड़ा अजीब है।

eतालिकाओं और बाकी तालिकाओं के बीच में शामिल होने की स्थिति है:

AND c.crsnum = e.crsnum  
AND c.batch_no = e.batch_no  
AND d.lect_code= e.lect_code 

यह एक असामान्य संयोजन है। चूँकि हमारे पास प्रासंगिक संदर्भ अखंडता बाधाओं के साथ स्कीमा का प्रासंगिक उपसमूह नहीं है, इसलिए यह जानना मुश्किल है कि यह सही है या नहीं, लेकिन इस तरह 3 तालिकाओं के बीच जुड़ना थोड़ा असामान्य है।

इसमें से कोई भी आपकी समस्या का निश्चित उत्तर नहीं है; हालाँकि, यह कुछ मार्गदर्शन प्रदान कर सकता है।


2

अब तक किए गए सभी इनपुट के लिए धन्यवाद। मैं बस उस पर जोड़ना चाहता हूं, जबकि एक व्यक्ति ने डीबी को सफलतापूर्वक सामान्य किया हो सकता है, अपने एप्लिकेशन में किसी भी स्कीमा परिवर्तन (जैसे डाटासेट के लिए) को अपडेट किया है, इसलिए एक और कारण यह भी है: sql CARTESIAN उत्पाद (प्रश्नों में तालिकाओं में शामिल होने पर)।

कार्टेशियन क्वेरी परिणाम के अस्तित्व में दो या अधिक तालिकाओं के प्राथमिक (या कुंजी पहले) तालिका में डुप्लिकेट रिकॉर्ड शामिल हो जाएंगे। यहां तक ​​कि अगर आप एसक्यूएल में "कहां" खंड निर्दिष्ट करते हैं, तो एक कार्टेशियन तब भी हो सकता है यदि उदाहरण के लिए द्वितीयक तालिका के साथ शामिल होने में असमान शामिल होता है (2 या अधिक असंबंधित तालिकाओं से डेटा प्राप्त करने के लिए उपयोगी):

TbFirst INNER पर tbFirst से tbFirst.reference_str <> tbSystem.systemKey_str

इसके लिए समाधान: तालिकाओं का संबंध होना चाहिए।

धन्यवाद। chagbert


1

मैंने इसी समस्या को असत्य से सत्य में बदलकर हल किया। अंत में मैं डेटाबेस में गया और अशक्त होने की अनुमति देने के लिए अपने बिट फ़ील्ड को बदल दिया, और फिर अपने xsd को रीफ़्रेश किया, और अपने wsdl और reference.cs को ताज़ा किया और अब सब ठीक है।

this.columnAttachPDFToEmailFlag.AllowDBNull = true;

1

लघु और आसान समाधान

MSSQL स्टूडियो सेवर पर जाएं;

इस त्रुटि के कारण की क्वेरी चलाएँ: मेरे मामले में मैं देख रहा हूँ कि आईडी मान शून्य था क्योंकि मैं 1 से पहचान विनिर्देश वृद्धि सेट करना भूल गया

यहां छवि विवरण दर्ज करें

तो आईडी फ़ील्ड के लिए 1 दर्ज किया गया है क्योंकि यह ऑटोइंक्रोमैन है और संशोधित नाल्स को वांछित दृश्य में अनुमति नहीं देता है

यहां छवि विवरण दर्ज करें

इस कोड में मेरे बाइंडिंगसोर्स और टैबेल एडाप्टर थ्रिन एरर के कारण त्रुटि हुई:

   this.exchangeCheckoutReportTableAdapter.Fill(this.sbmsDataSet.ExchangeCheckouReportTable);

0

DirectCast (dt.Rows (0), DataRow) .RowError

यह सीधे त्रुटि देता है


2
अच्छा सुझाव है, लेकिन यह केवल तभी काम करता है जब यह डिटिटेबल में पहली पंक्ति है जिसमें त्रुटि है, है ना? यदि 100 अच्छी पंक्तियों को वापस किया जाता है और फिर 1 खराब पंक्ति होती है, तो क्या कोई RowErrorऑन नहीं Rows(0)होगा?
पॉलस्टॉक

0

यदि आप डेटा टेबल प्राप्त करने के लिए विजुअल स्टूडियो डेटासेट डिज़ाइनर का उपयोग कर रहे हैं, और यह एक त्रुटि 'Fail to Enable constraints' फेंक रहा है। मैंने एक ही समस्या का सामना किया है, डेटासेट डिजाइनर से डेटा का पूर्वावलोकन करने का प्रयास करें और इसे अपने डेटाबेस के अंदर तालिका के साथ मिलाएं।

इस समस्या को हल करने का सबसे अच्छा तरीका टेबल एडेप्टर को हटाना और इसके बजाय एक नया बनाना है।


0

* माध्यमिक तरीका: *


यदि आपको प्राथमिक कुंजी के रूप में [आईडी] की आवश्यकता नहीं है,

इसकी प्राथमिक कुंजी विशेषता निकालें:

अपने DataSet> TableAdapter> राइट क्लिक पर [id] कॉलम> हटाएँ कुंजी चुनें ...

समस्या ठीक हो जाएगी।


0

मेरे पास भी यह समस्या थी और अंतर्निहित SQL सर्वर में बदले गए कॉलम के संशोधित आकार को प्रतिबिंबित करने के लिए * .xsd को संशोधित करने के बाद इसे हल किया गया था।


0

इस त्रुटि को ठीक करने के लिए, मैंने डेटासेट डिज़ाइनर से परेशान तालिका एडाप्टर को हटा दिया, और डेटासेट को सहेज लिया, और फिर सर्वर एक्सप्लोरर से तालिका एडाप्टर की एक नई प्रति खींच ली और इसे ठीक कर दिया


0

मैंने एक XML रीडर के साथ .xsd फ़ाइल को खोलकर और मेरे एक विचार पर रखे गए अवरोध को हटाकर इस समस्या को हल किया। जिस कारण से जब मैंने डेटा को दृश्य जोड़ा तो उसने एक कॉलम में से एक में प्राथमिक कुंजी बाधा जोड़ी जब एक नहीं होना चाहिए था।

दूसरा तरीका यह है कि .xsd फ़ाइल को सामान्य रूप से खोलें, तालिका / दृश्य को देखें जिससे समस्या उत्पन्न हो और कोई भी कुंजी (राइट क्लिक कॉलम, चयन करें delete key) जो वहां नहीं होनी चाहिए को हटा दें ।


0

केवल उन सूचीबद्ध लोगों के अपवाद के लिए एक और संभावित कारण जोड़ना चाहते हैं (विशेषकर उन लोगों के लिए जो स्वयं डेटासेट स्कीमा को परिभाषित करना पसंद करते हैं):

जब आपके डेटासेट में आपके दो टेबल होते हैं और DataSet.Reletions.Add()पहली टेबल के क्षेत्र ( chfield) से दूसरे टेबल के क्षेत्र ( pfield) में परिभाषित एक संबंध ( ) होता है, तो ऐसा लगता है कि उस क्षेत्र में एक अड़चन डाली गई है ताकि अद्वितीय हो भले ही यह हो आपकी परिभाषा में ऐसे स्पष्ट रूप से निर्दिष्ट किया गया है जो न तो अद्वितीय है और न ही प्राथमिक कुंजी के रूप में।

परिणामस्वरूप, क्या आपके पास उस मूल फ़ील्ड में दोहराए गए मानों वाली पंक्तियाँ होनी चाहिए ( pfield) आपको यह अपवाद भी मिलेगा।


0
            using (var tbl = new DataTable())
            using (var rdr = cmd.ExecuteReader())
            {
                tbl.BeginLoadData();

                try
                {
                    tbl.Load(rdr);
                }
                catch (ConstraintException ex)
                {
                    rdr.Close();
                    tbl.Clear();

                    // clear constraints, source of exceptions
                    // note: column schema already loaded!
                    tbl.Constraints.Clear();
                    tbl.Load(cmd.ExecuteReader());
                }
                finally
                {
                    tbl.EndLoadData();
                }
            }

0

मुझे एक ही त्रुटि प्रकार प्राप्त हुआ और मेरे मामले में इसे चुनिंदा क्षेत्रों को हटाकर और उन्हें * के साथ प्रतिस्थापित करके हल किया गया। पता नहीं क्यों ऐसा हो रहा था। क्वेरी में कोई टाइपोस या कुछ भी फैंसी नहीं था।

सबसे अच्छा समाधान नहीं है लेकिन कुछ और काम नहीं किया और मैं थक गया था।

एक स्पष्ट उत्तर के लिए मेरी खोज में मुझे यह इस पर मिला: https://www.codeproject.com/questions/45516/failed-to-enable-constraints-one-or-more-rows-cont

समाधान 8

दृश्य स्टूडियो 2010 का उपयोग करते हुए, यह त्रुटि मेरे प्रोजेक्ट में भी दिखाई दे रही थी। मैंने अन्य ब्लॉगों में पोस्ट किए गए अन्य समाधानों की कोशिश की, लेकिन कोई भी भाग्य नहीं था क्योंकि समस्या का खेतों के आकार, तालिका के प्रमुख क्षेत्रों की परिभाषा, बाधाओं या EnforceConstraintsडेटासेट चर से कोई लेना-देना नहीं था ।

मेरे मामले में मेरे पास एक .xsd ऑब्जेक्ट है जो मैंने प्रोजेक्ट डिज़ाइन समय (डेटा एक्सेस लेयर में) के दौरान वहां रखा था। जैसे ही आप अपने डेटाबेस टेबल ऑब्जेक्ट्स को डेटासेट विजुअल आइटम में खींचते हैं, यह अंतर्निहित डेटाबेस से प्रत्येक टेबल की परिभाषा को पढ़ता है और इसमें अड़चन को कॉपी करता हैDataset आप अपने डेटाबेस में तालिकाओं को बनाते समय ठीक उसी तरह से हैं जैसे आपने उन्हें परिभाषित किया था (SQL Server 2008 R2 मेरे मामले में )। इसका मतलब यह है कि "नहीं नल" या "विदेशी कुंजी" की कमी के साथ बनाया गया प्रत्येक टेबल कॉलम आपके SQL स्टेटमेंट या संग्रहीत कार्यविधि के परिणाम में भी मौजूद होना चाहिए।

अपने प्रश्नों में समस्या के पूरी तरह से गायब हो जाने के बाद मैंने सभी विवश स्तंभों (शून्य, प्राथमिक कुंजी, विदेशी कुंजी, आदि) को शामिल नहीं किया।

शायद आपको क्वेरी / संग्रहीत कार्यविधि परिणाम में उपस्थित होने के लिए सभी तालिका स्तंभों की आवश्यकता नहीं है, लेकिन क्योंकि बाधाओं को अभी भी लागू किया जाता है यदि त्रुटि दिखाई जाती है यदि कुछ संकुचित कॉलम परिणाम में प्रकट नहीं होता है।

मनाइए कि यह किसी और के लिए सहायक हो।


-1

मेरे मामले में यह त्रुटि एक स्ट्रिंग कॉलम के आकार से उकसाया गया था। क्या अजीब था जब मैंने अलग-अलग टूल में सटीक एक ही क्वेरी को निष्पादित किया, दोहराया मूल्यों और न ही शून्य मान नहीं थे।

तब मुझे पता चला कि एक स्ट्रिंग कॉलम का आकार 50 था इसलिए जब मैंने भरण विधि को बुलाया तो मूल्य काट दिया गया, इस अपवाद को फेंक दिया।
मैं कॉलम पर क्लिक करता हूं और गुण में आकार 200 में सेट करता हूं और त्रुटि हो गई थी।

उममीद है कि इससे मदद मिलेगी


-1

मैंने इस समस्या को "सबसेक्ट" करके हल किया:

string newQuery = "select * from (" + query + ") as temp";

जब यह mysql पर होता है, सभी संपत्तियों की संपत्तियों (अद्वितीय, गैर-शून्य ...) को साफ कर दिया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.