2013-01-25 12 views
7

स्वीकार करें मैंने अपना कोड यथासंभव कॉम्पैक्ट बनाने की कोशिश की है।SQL सर्वर दिनांक समय पूर्ण

Microsoft SQL सर्वर का उपयोग करना, .NET 2.0

मैं जो शून्य मान

LeaseExpiry(datetime, null) 

मैं पाठ बॉक्स के मूल्य पकड़ें और उसे datetime में बदलने को स्वीकार करता है मेरी डेटाबेस में एक तिथि क्षेत्र की है।

DateTime leaseExpiry = Convert.ToDateTime(tbLeaseExpiry.Text); 

INSERT_record(leaseExpiry); 

मेरी समस्या यह है कि यदि फॉर्म सबमिट किया गया है और टेक्स्टबॉक्स खाली है। मुझे यह त्रुटि वापस मिलती है:

स्ट्रिंग को वैध दिनांक समय के रूप में पहचाना नहीं गया था।

कैसे इतना है कि यदि टेक्स्ट बॉक्स खाली है, पंक्ति NULL साथ डेटाबेस में बनाई गई है मैं अपने कोड की स्थापना करते हैं?

मैं दृश्य स्टूडियो में रिक्त लेकिन पाने के लिए एक त्रुटि

DateTime leaseExpiry = null; 

कनवर्ट नहीं कर सकता 'System.DateTime' के लिए अशक्त क्योंकि यह गैर-व्यर्थ मान प्रकार है मेरी चर आरंभ कोशिश की है।

यहाँ डेटा एक्सेस परत है कि यदि में मदद करता है

public string INSERT_record(DateTime leaseExpiry) 
{ 
    //Connect to the database and insert a new record 
    string cnn = ConfigurationManager.ConnectionStrings[connname].ConnectionString; 

    using (SqlConnection connection = new SqlConnection(cnn)) 
    { 
     string SQL = string.Empty; 
     SQL = "INSERT INTO [" + dbname + "].[dbo].[" + tblAllProperties + "] ([LeaseExpiry]) VALUES (@leaseExpiry); 

     using (SqlCommand command = new SqlCommand(SQL, connection)) 
     { 
       command.Parameters.Add("@leaseExpiry", SqlDbType.DateTime); 
       command.Parameters["@leaseExpiry"].Value = leaseExpiry; 
     } 

     try 
     { 
       connection.Open(); 
       command.ExecuteNonQuery(); 
       return "Success"; 
     } 
     catch (Exception ex) 
     { 
       return ex.Message; 
     } 
    } 
} 

आप

+0

इसे 'लीज एक्स्पिररी' ('लीज एक्स्पायरी' नहीं) लिखा जाना चाहिए - आपके पास आपके कोड में दोनों संस्करण थे, जो वास्तव में भ्रमित है। मैंने इसे हर समय 'समाप्ति' के रूप में तय किया। –

उत्तर

13

दरअसल, DateTime धन्यवाद null नहीं हो सकता। लेकिन: DateTime? हो सकता है। ध्यान दें कि पैरामीटर पर, null का अर्थ है "भेजें नहीं"; आप की आवश्यकता होगी:

public string INSERT_record(DateTime? leaseExpirey) 
{ 
    // ... 
    command.Parameters.Add("@leaseExpirey", SqlDbType.DateTime); 
    command.Parameters["@leaseExpirey"].Value = 
       ((object)leaseExpirey) ?? DBNull.Value; 
    // ... 
} 
+0

धन्यवाद जो आपकी मदद करता है। – Scott

2

आप leaseExpirey कर सकता है एक नल DateTime - यानी DateTime? leaseExpirey

तो फिर तुम कह सकते हैं:

DateTime? leaseExpirey; 
if (!string.IsNullOrEmpty(tbLeaseExpiry.Text.Trim())) 
    leaseExpirey = Convert.ToDateTime(tbLeaseExpiry.Text); 

INSERT_record(leaseExpirey); 

तुम भी एक DateTime? पैरामीटर स्वीकार करने के लिए INSERT_record को बदलने की जरूरत होगी DateTime के बजाय।

3

एक नल दिनांक समय और TryParse()

DateTime? leaseExpirey = null; 
DateTime d; 
if(DateTime.TryParse(tbLeaseExpiry.Text, out d)) 
{ 
    leaseExpirey = d; 
} 

INSERT_record(leaseExpirey); 
+0

धन्यवाद, मैंने इसका भी उपयोग किया है। – Scott

0

आप, DateTime.MinValue का उपयोग करना चाहिए के बाद से दिनांक समय null कभी नहीं है का उपयोग करें।

संबंधित मुद्दे