दिलचस्प पोस्ट
'जावा' को आंतरिक या बाहरी कमान के रूप में मान्यता नहीं दी गई है जब वापस ढेर में जोड़ा गया तो मैं टुकड़ा राज्य कैसे बनाए रख सकता हूं? CSS के माध्यम से एक बटन का आकार बदलना जब जावा में स्थिर खोजशब्द का उपयोग न करें? Row_Number से भिन्न एसक्यूएल क्वेरी क्या सी ++ 11 लैम्ब्दास कैप्चर वेरिएबल्स है जो वे उपयोग नहीं करते हैं? Google पर क्रियाओं पर सिर्फ एक Google खाते के साथ उपयोगकर्ता कैसे प्रमाणित करें? सीएसएस मिनेफ़ायर के लिए कोई सिफारिशें? asp.net mvc3 रेजर प्रलेखन? सी / सी ++ में सर्वश्रेष्ठ एन्क्रिप्शन लाइब्रेरी क्या है? कैसे MongoDB में लेनदेन की कमी के आसपास काम करने के लिए? जावास्क्रिप्ट के माध्यम से सीएसएस फ़ाइल सामग्री का उपयोग करें पीएचपी में हाइफ़न के साथ XML नोड नाम का उपयोग करना प्रॉपर्टी बनाम इंस्टेंस वैरिएबल एक वेब ब्राउज़र बनाने के लिए जावा का उपयोग करना

वस्तु को डीबीब्लूलल से अन्य प्रकार से नहीं डाला जा सकता

वस्तु को डीबीब्लूलल से अन्य प्रकार से नहीं डाला जा सकता।

मेरे पास एक निम्न कार्य है जो उपरोक्त त्रुटि को फेंकता है। मैं दुकान प्रक्रिया में सभी नल और सी # कोड में संभाल रहा हूँ।

तो यह कहां यह त्रुटि हो रही है?

मैं पकड़ ब्लॉक में त्रुटि देख सकता हूँ लेकिन मुझे समझ में नहीं आ रहा है कि निम्न में से कौन सी लाइन बना रही है () त्रुटि हो रही है

public Boolean Create(DataTO DataTO) { IDbTrans transaction = null; IDbCmd IDbCmd; string EncryptedPassword = Encrypt(DataTO.txtPwd); Base dataAccCom = null; try { dataAccCom = Factory.Create(); dataAccCom.OpenConnection(); transaction = dataAccCom.BeginTransaction(); IDbCmd = dataAccCom.CreateCommand("sp_Register", true); dataAccCom.AddParameter(IDbCmd, "op_Id", DbType.Int64, 0, ParameterDirection.Output); dataAccCom.AddParameter(IDbCmd, "p_dlstTitle", DbType.String, ReplaceNull(DataTO.dlstTitle)); dataAccCom.AddParameter(IDbCmd, "p_txtFirstName", DbType.String, ReplaceNull(DataTO.txtFirstName)); dataAccCom.AddParameter(IDbCmd, "p_txtMiddleName", DbType.String, ReplaceNull(DataTO.txtMiddleName)); dataAccCom.AddParameter(IDbCmd, "p_txtLastName", DbType.String, ReplaceNull(DataTO.txtLastName)); dataAccCom.AddParameter(IDbCmd, "p_txtDob", DbType.DateTime, DataTO.txtDob); dataAccCom.AddParameter(IDbCmd, "p_txtDesig", DbType.String, ReplaceNull(DataTO.txtDesig)); dataAccCom.AddParameter(IDbCmd, "p_txtOFlatNo", DbType.String, ReplaceNull(DataTO.txtOFlatNo)); dataAccCom.AddParameter(IDbCmd, "p_txtOBuild", DbType.String, ReplaceNull(DataTO.txtOBuild)); dataAccCom.AddParameter(IDbCmd, "p_txtOPost", DbType.String, ReplaceNull(DataTO.txtOPost)); dataAccCom.AddParameter(IDbCmd, "p_txtOArea", DbType.String, ReplaceNull(DataTO.txtOArea)); dataAccCom.AddParameter(IDbCmd, "p_txtOCity", DbType.String, ReplaceNull(DataTO.txtOCity)); dataAccCom.AddParameter(IDbCmd, "p_txtRBuild", DbType.String, ReplaceNull(DataTO.txtRBuild)); dataAccCom.AddParameter(IDbCmd, "p_txtRPost", DbType.String, ReplaceNull(DataTO.txtRPost)); dataAccCom.AddParameter(IDbCmd, "p_txtUserID", DbType.String,ReplaceNull(DataTO.txtUserID)); dataAccCom.AddParameter(IDbCmd, "p_txtPwd", DbType.String, ReplaceNull(EncryptedPassword)); dataAccCom.ExecuteNonQuery(IDbCmd); DataTO.Id = Convert.ToInt64(dataAccCom.GetParameterValue(IDbCmd, "op_Id")); transaction.Commit(); return true; } catch (System.Exception ex) { if (transaction != null) { transaction.Rollback(); } throw ex; } finally { transaction = null; if (dataAccCom != null) { dataAccCom.CloseConnection(); } dataAccCom = null; IDbCmd = null; } } public string ReplaceNull(string value) { if (value == null) { return ""; } else { return value; } } public DateTime ReplaceNull(DateTime value) { if (value == null) { return DateTime.Now; } else { return value; } } public double ReplaceNull(double value) { if (value == null) { return 0.0; } else { return value; } } 

Solutions Collecting From Web of "वस्तु को डीबीब्लूलल से अन्य प्रकार से नहीं डाला जा सकता"

मैं सोच रहा हूं कि आपका आउटपुट पैरामीटर एक डीबीबीबल मान के साथ वापस आ रहा है। इस तरह के लिए एक चेक जोड़ें

 var outputParam = dataAccCom.GetParameterValue(IDbCmd, "op_Id"); if(!(outputParam is DBNull)) DataTO.Id = Convert.ToInt64(outputParam); 

मुझे संदेह है कि लाइन

 DataTO.Id = Convert.ToInt64(dataAccCom.GetParameterValue(IDbCmd, "op_Id")); 

समस्या पैदा कर रहा है क्या यह संभव है कि संग्रहित प्रक्रिया के द्वारा op_Id मान रिक्त करने के लिए सेट किया जा रहा है?

इसके खिलाफ गार्ड को Convert.IsDBNull उपयोग करें। Convert.IsDBNull विधि। उदाहरण के लिए:

 if (!Convert.IsDBNull(dataAccCom.GetParameterValue(IDbCmd, "op_Id")) { DataTO.Id = Convert.ToInt64(dataAccCom.GetParameterValue(IDbCmd, "op_Id")); } else { DataTO.Id = ...some default value or perform some error case management } 

आपको DBNull जांच करने की जरूरत नहीं है, null नहीं। इसके अतिरिक्त, आपके दो तीन ReplaceNull तरीकों में से कोई मतलब नहीं है। double और DateTime अतारांकित हैं, इसलिए उन्हें null जांचना हमेशा false

TryParse आमतौर पर इस प्रकार की बात को संभालने का सबसे शानदार तरीका है:

 long temp = 0; if (Int64.TryParse(dataAccCom.GetParameterValue(IDbCmd, "op_Id").ToString(), out temp)) { DataTO.Id = temp; } 

त्रुटि का कारण: ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा में, शून्य मतलब किसी ऑब्जेक्ट के संदर्भ का अभाव है। डीबीब्लुल एक अप्रकाशित संस्करण या निरंतर डेटाबेस कॉलम का प्रतिनिधित्व करता है। स्रोत: MSDN

वास्तविक कोड जो मुझे त्रुटि का सामना करना पड़ा:

कोड को बदलने से पहले:

  if( ds.Tables[0].Rows[0][0] == null ) // Which is not working { seqno = 1; } else { seqno = Convert.ToInt16(ds.Tables[0].Rows[0][0]) + 1; } 

कोड बदलने के बाद:

  if( ds.Tables[0].Rows[0][0] == DBNull.Value ) //which is working properly { seqno = 1; } else { seqno = Convert.ToInt16(ds.Tables[0].Rows[0][0]) + 1; } 

निष्कर्ष: जब डेटाबेस मान रिक्त मान लौटाता है, तो हम सी # भाषा की तरह एक अशक्त के रूप में निर्दिष्ट करने के बजाय DBNull वर्ग का उपयोग करने की सलाह देते हैं।

Google से इस पृष्ठ पर आने वाले अन्य लोगों के लिए:

.IsNull("ColumnName") भी एक फ़ंक्शन है .IsNull("ColumnName")

  public DateTime? TestDt; public Parse(DataRow row) { if (!row.IsNull("TEST_DT")) TestDt = Convert.ToDateTime(row["TEST_DT"]); }