C# - 无法将参数值从RuntimeMethodInfo转换为String

时间:2011-08-16 21:53:50

标签: c# string

以下是代码:

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,而不是在我分配值的上面的一个点。我逐步调试了Debug中的代码,它只在尝试执行该行的代码时才会出错。

我进行了Google搜索

  

无法将参数值从RuntimeMethodInfo转换为String

但没有命中。所以我搜索了

  

从RuntimeMethodInfo转换为String

仍然没有运气。

为了帮助您更好地理解代码,语句

GetSqlCommand("ins_error_log", databaseConnection)

基本上是熄灭并且识别出引号中的信息是存储过程而不是查询字符串。

以上所有代码都已在整个应用程序中使用(由其他人编写),我所做的就是复制它并对存储过程名称,SQL参数和插入的值进行必要的修改。

感谢您的帮助!

*注意:我尝试将此问题的TAG设置为“RuntimeMethodInfo”,但它不会让我,因为我的声誉不到1500。也许其他人可以为我做或给我权限来处理这个。

3 个答案:

答案 0 :(得分:1)

Dunno如果这是你的问题,但它没有帮助:

inner_exception_msg.Value = _error.InnerException;

我想你想要:

inner_exception_msg.Value = _error.InnerException.Message;

答案 1 :(得分:1)

就是这一行:

target_site_msg.Value = _error.TargetSite;

Exception.TargetSite是一个MethodBase,而不是一个字符串。尝试更改为:

target_site_msg.Value = _error.TargetSite.Name;

答案 2 :(得分:0)

尝试使用SqlCommand.Parameters.AddWithValue(),以及inner_exception_msg param需要是字符串而不是对象。 InnerExceptionException对象,但您需要提供字符串。

也许.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);