दिलचस्प पोस्ट
Django टेम्पलेट कैसे एक चर के साथ एक शब्द मान को देखने के लिए संपत्ति द्वारा कोणीय जे एस छँटाई जावा: BigInteger का उपयोग कैसे करें? क्या टेम्पलेट तर्क (हस्ताक्षर) std :: function भाग का प्रकार नहीं है? मेरे फायरबसे तक अन्य पहुंच को कैसे रोकें? WiAx का उपयोग कर एक कस्टम एक्शन के लिए कस्टमएक्शनडेटा कैसे पास करें? पैकेज नाम से आवेदन नाम प्राप्त करें मुक्केबाजी और अनबॉक्सिंग क्या है और व्यापार बंद क्या हैं? मैं अपने वर्ग के सभी उपवर्गों को कैसे अपनाया? हनोई के टॉवर: पुनरावर्ती अल्गोरिदम SQL सर्वर अनुक्रमणिका – आरोही या अवरोही, यह क्या अंतर करता है? एंड्रॉइड – लैंडस्केप मोड अक्षम करें? जब मैं सेटटिमेउट का उपयोग करता हूं तो विधि तुरंत निष्पादित क्यों होती है? गंभीर त्रुटि: कक्षा के लिए अपरिवर्तित initializer 'init (coder :)' का उपयोग रूटर v4 प्रतिक्रिया के साथ नेस्टेड मार्ग

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

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

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

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

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

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; } } 

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

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

 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"]); }