无法将对象从DBNull强制转换为其他类型。
我有以下引发上述错误的函数。我正在处理存储过程和C#代码中的所有null。
那么在哪里得到这个错误呢?
我可以在catch块中看到错误。但是我不明白下面的create()中的哪一行得到了错误。
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; } }
我在想您的输出参数带有DBNull值。像这样添加支票
var outputParam = dataAccCom.GetParameterValue(IDbCmd, "op_Id"); if(!(outputParam is DBNull)) DataTO.Id = Convert.ToInt64(outputParam);