c# -将参数值从RuntimeMethodInfo转换为字符串失败
本文关键字:转换 字符串 失败 RuntimeMethodInfo 参数 | 更新日期: 2023-09-27 18:05:53
代码如下:
internal static void UpdateErrorLogTable(string type, string location, string method, Exception _error, string ftpDirectory, string remoteName, string localName)
{
try
{
using (SqlConnection databaseConnection = GetDatabaseConnection())
{
using (SqlCommand cmd = GetSqlCommand("ins_error_log", databaseConnection))
{
SqlParameter log_date = cmd.Parameters.Add("@log_date", SqlDbType.DateTime);
SqlParameter exception_type = cmd.Parameters.Add("@exception_type", SqlDbType.VarChar);
SqlParameter class_name = cmd.Parameters.Add("@class_name", SqlDbType.VarChar);
SqlParameter method_name = cmd.Parameters.Add("@method_name", SqlDbType.VarChar);
SqlParameter error_msg = cmd.Parameters.Add("@error_msg", SqlDbType.VarChar);
SqlParameter stack_trace_msg = cmd.Parameters.Add("@stack_trace_msg", SqlDbType.VarChar);
SqlParameter target_site_msg = cmd.Parameters.Add("@target_site_msg", SqlDbType.VarChar);
SqlParameter ftp_directory = cmd.Parameters.Add("@ftp_directory", SqlDbType.VarChar);
SqlParameter ftp_name = cmd.Parameters.Add("@ftp_name", SqlDbType.VarChar);
SqlParameter ftp_path = cmd.Parameters.Add("@ftp_path", SqlDbType.VarChar);
SqlParameter inner_exception_msg = cmd.Parameters.Add("@inner_exception_msg", SqlDbType.VarChar);
log_date.Value = m_todaysDate;
exception_type.Value = type;
class_name.Value = location;
method_name.Value = method;
error_msg.Value = _error.Message;
stack_trace_msg.Value = _error.StackTrace;
target_site_msg.Value = _error.TargetSite;
ftp_directory.Value = ftp_directory;
ftp_name.Value = remoteName;
ftp_path.Value = localName;
inner_exception_msg.Value = _error.InnerException;
cmd.ExecuteNonQuery();
}
} // using databaseConnection
} //end of TRY statement
catch (SqlException e)
{
logFile.SendToLog("SqlException", "Logs''LogsDataAccess.cs", "UpdateErrorLogTable()", e);
} //end of SqlException CATCH statement
} //end of method UpdateErrorLogTable
我得到的错误是InvalidCastException,但它发生时,试图执行
cmd.ExecuteNonQuery();
我无法弄清楚的部分是为什么我在这里得到一个InvalidCastException,而不是在上面我赋值的点之一。我在调试中逐行执行代码,只有在尝试执行一行代码时才会出现错误。
我用Google搜索
将参数值从RuntimeMethodInfo转换为字符串失败
但没有命中。所以我搜索
从RuntimeMethodInfo转换为String
仍然没有运气。
为了帮助您更好地理解代码,语句
GetSqlCommand("ins_error_log", databaseConnection)
基本上识别出引号中的信息是存储过程,而不是查询字符串。
上面的所有代码都在整个应用程序中使用(由其他人编写),我所做的只是复制它,并对存储过程名称、SQL参数和插入的值进行必要的修改。
我非常感谢你的帮助!*注:我尝试设置TAG为这个问题为"RuntimeMethodInfo",但它不会让我,因为我有少于1500的声誉。也许其他人可以帮我做,或者给我权限来处理这件事。
是这一行:
target_site_msg.Value = _error.TargetSite;
Exception.TargetSite
是一个MethodBase,而不是字符串。试着改成:
target_site_msg.Value = _error.TargetSite.Name;
不知道这是不是你的问题,但这不会有帮助:
inner_exception_msg.Value = _error.InnerException;
我想你要:
inner_exception_msg.Value = _error.InnerException.Message;
尝试使用SqlCommand.Parameters.AddWithValue()
,以及inner_exception_msg
参数需要是字符串而不是对象。InnerException
是一个Exception
对象,但是您需要提供一个字符串。
也许.Message
足够好。
cmd.Parameters.AddWithValue("@log_date", m_todaysDate);
cmd.Parameters.AddWithValue("@exception_type", type);
cmd.Parameters.AddWithValue("@class_name", location);
cmd.Parameters.AddWithValue("@method_name", method);
cmd.Parameters.AddWithValue("@error_msg", _error.Message);
cmd.Parameters.AddWithValue("@stack_trace_msg", _error.StackTrace);
cmd.Parameters.AddWithValue("@target_site_msg", _error.TargetSite);
cmd.Parameters.AddWithValue("@ftp_directory", ftp_directory);
cmd.Parameters.AddWithValue("@ftp_name", remoteName);
cmd.Parameters.AddWithValue("@ftp_path", localName);
cmd.Parameters.AddWithValue("@inner_exception_msg", _error.InnerException.Message);