वीएस-स्टूडियो 2012 वेब एक्सप्रेस, एएसपी.नेट, वेबफॉर्म, वीबी, एसक्लसेवर, वेबसाइट एप्लिकेशन को डेटटाइम के लिए एक पूर्ण मान को दृढ़ता से टाइप की गई पंक्ति में सहेजने में परेशानी हो रही है:

      Dim oRowVEHICLES As Main_TblAdap.tVEHICLESRow = odtVEHICLES.Rows(0)  ' (0) is the first row.
      oRowVEHICLES.[WElectrical] = If(WElectrical.Year < 10, DBNull.Value, WElectrical)
...etc...

वर्तमान में विवरण दृश्य टेम्पलेट फ़ील्ड टेक्स्टबॉक्स <रिक्त> या खाली या "" है और बीएलएल फ़ंक्शन इसे दिनांक के रूप में दिखाता है जैसे: #01/01/0001#। इसलिए मैं पास किए गए चर के वर्ष मान का परीक्षण करता हूं यदि 10 से कम है तो DBNull.Value को oRowVehicles में सहेजें। [WElectrical] लेकिन डेटाटाइप = दिनांक के बाद से विफल रहता है और DBNull को दिनांक में परिवर्तित नहीं कर सकता है।

डीबी-फील्ड टाइप डेट है और नल की अनुमति देता है।

TableAdapter.xsd दृश्य दिखाता है कि डिफ़ॉल्ट मान है।

तो, oRowVehicles दिनांक को निरस्त करने योग्य क्यों नहीं है?

मैं WElectrical कॉलम को अशक्त DATE कैसे बना सकता हूँ?

मुझे कुछ दिखाई दे रहा होगा, क्योंकि एसक्यूएल-डीबी में वैकल्पिक DATE मान को सहेजने वाला मैं अकेला नहीं हो सकता।

आपकी टिप्पणियों और समाधानों का स्वागत है। धन्यवाद ... जॉन

संपादित करें विवरण दृश्य में ASPX कोड एक DATE फ़ील्ड (अन्य समान हैं):

              <asp:TemplateField HeaderText="Electrical End Date" SortExpression="WElectrical">
                 <EditItemTemplate>
                    <TGADate:GADate ID="ucdtWElectrical" runat="server" Enabled="True" MinDate="01/01/1980" MaxDate="12/31/2050"
                       Caption="Electrical End Date" HideCaption="True" Width="100"
                       IsRequired="false"
                       UpdateMode="Conditional"
                       Text='<%# Bind("WElectrical")%>' />
                 </EditItemTemplate>
                 <InsertItemTemplate>
                    <TGADate:GADate ID="ucdtWElectrical2" runat="server" Enabled="True" MinDate="01/01/1980" MaxDate="12/31/2050"
                       Caption="Electrical End Date" HideCaption="True" Width="100"
                       IsRequired="false"
                       UpdateMode="Conditional"
                       Text='<%# Bind("WElectrical")%>' />
                 </InsertItemTemplate>
                 <ItemTemplate>
                    <asp:Label ID="lblWElectrical" runat="server" Text='<%# clsGA_Lib1.fnGetDateTextFromObject(Eval("WElectrical"))%>' Style="font-weight: bold;"></asp:Label>
                 </ItemTemplate>
                 <ItemStyle Font-Bold="true" />
              </asp:TemplateField>

एएसपीएक्स में ऑब्जेक्ट डेटासोर्स पैरामीटर परिभाषा।

 <asp:Parameter Name="WElectrical" Type="DateTime" />

बीएलएल कोड:

   <System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, False)> _
Public Function UpdateFromDetailsView(ByVal original_UID_VEHICLE As Int32, _
                                     ByVal VehicleNbr As String, _
...other function parameter variables...      
                                     ByVal WElectrical As Date, _
...other function parameter variables...      
                                   ) As Boolean

  ' Get the new VEHICLE-row instance to be updated.
  Dim odtVEHICLES As Main_TblAdap.tVEHICLESDataTable = Adapter.GetVhclByVhclID(original_UID_VEHICLE)

  If odtVEHICLES.Count <> 1 Then
     ' no matching record found, return false
     Return False
  End If

  ' Populate the values of the ROW.
  Dim oRowVEHICLES As Main_TblAdap.tVEHICLESRow = odtVEHICLES.Rows(0)  ' (0) is the first row.
  With oRowVEHICLES
     ...setting row-field values...
     .[WElectrical] = If(WElectrical.Year < 10, Nothing, WElectrical)
     ...etc...
  End With

  ' Update the oRowVEHICLES.
  Dim rowsAffected As Integer = Adapter.Update(odtVEHICLES)

  ' Return TRUE if precisely one row was INSERTED, otherwise false.
  Return CBool(rowsAffected = 1)
End Function

उपरोक्त कोड के लिए टिप्पणी संपादित करें

बीएलएल-फ़ंक्शन में आने वाला WEइलेक्ट्रिकल पैरामीटर #01/01/0001# के मान के साथ एक DATE है।
मान को ROW-ऑब्जेक्ट में रखने के लिए कोड

.[WElectrical] = If(WElectrical.Year < 10, Nothing, WElectrical)

पंक्ति-वस्तु-क्षेत्र-मान के रूप में कुछ भी नहीं रखता है।

Adapter.Update(odtVEHICLES) Sql-DB को अपडेट करता है।

तो #01/01/0001# मान को Sql-DB में रखने का क्या कारण है?

एसक्यूएल-डीबी कॉलम परिभाषा

enter image description here

//////// संपादन का अंत ///////////

-1
John D 25 जुलाई 2016, 20:54

2 जवाब

सबसे बढ़िया उत्तर

उपरोक्त प्रश्न के लिए सभी टिप्पणीकारों को धन्यवाद। समाधान इस वाक्य में रो-कॉलम-वेरिएबल को बदलना है जो कुछ भी तारीख तक नहीं डालता है? (अशक्त) इस प्रकार है ...

 .[WElectrical] = If(WElectrical.Year < 10, CType(Nothing, Date?), WElectrical)

AND -- डेटासेट-कॉलम-परिभाषा (.xsd में) को इस प्रकार बदला:

डेटा टाइप ==> सिस्टम। ऑब्जेक्ट (तारीख नहीं)

NullValue ==> (कुछ नहीं) (अपवाद नहीं फेंकें)

सभी योगदानकर्ताओं को मेरा हार्दिक धन्यवाद -- चूंकि उनके प्रत्येक सुझाव के तत्वों ने इस समाधान में योगदान दिया है।
यह DataRow-column में एक अशक्त मान भेजने का समाधान है।

आपकी मदद के लिए धन्यवाद।

0
John D 26 जुलाई 2016, 05:54

एक काम करो:

DBNull.Value को कुछ भी नहीं बदलें

वैकल्पिक रूप से आप डेटासेट में डेटाटाइप को System.Object में बदल सकते हैं, और उस डेटा कॉलम के गुणों पर जा सकते हैं, फिर आप ड्रॉपडाउन में '(कुछ नहीं)' का चयन कर सकते हैं।

शून्य मान सेट करें >> कुछ भी नहीं

0
abcool 25 जुलाई 2016, 23:01