0

我创建了一个方法,该方法会将抛出的任何异常插入 MySql 服务器上的“ExceptionLog”表中。

异常日志表格式

idExceptionLog int (AI) 用户 (varchar 45) ErrorMessage (varchart 4000)

问题是我不断收到以下错误。有谁知道为什么?

SqlParameterCollection 只接受非空的 SqlParameter 类型对象,不接受 MySqlParameter 对象。

private void showErrorBox(String errorMsg, MessageBoxButtons btnokshow)
    {

        MessageBox.Show(errorMsg, "FS Manager Error", MessageBoxButtons.OK);

        // write to DB

        string username = System.Environment.UserName.ToString();
        string timestamp = DateTime.Now.ToString();

          // Locals
        SqlConnection NasDB = null;
        SqlCommand inputError = null;
        int rows = 0;
        string spName = "ExceptionInsert";

        try
        {
            //Instantiate the DB connection setting the conn string
            using (NasDB = new SqlConnection(getConnectionString(ConnectionType.NAS)))
            {
                // Instantiate the command object that will fire the SP.
                using (inputError = new SqlCommand(spName, NasDB))
                {
                    // Finish setting up the command object
                    inputError.CommandType = CommandType.StoredProcedure;

                    // Set up the SP params.


                    inputError.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("ExceptionDate", MySql.Data.MySqlClient.MySqlDbType.DateTime, (1)));
                    inputError.Parameters[0].Value = timestamp;

                    inputError.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("User", MySql.Data.MySqlClient.MySqlDbType.VarChar, (45)));
                    inputError.Parameters[1].Value = System.Environment.UserName.ToString();

                    inputError.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("ExceptionMessage", MySql.Data.MySqlClient.MySqlDbType.VarChar, (4000)));
                    inputError.Parameters[2].Value = errorMsg;

                   
                    // Now that the SP is completely set up and ready to go open the conn and fire the SP.
                    inputError.Connection.Open();
                    rows = inputError.ExecuteNonQuery();

                    // Close ASAP
                    inputError.Connection.Close();
                }
            }

        }
        catch (Exception ex)
        {
            //showErrorBox(ex.ToString());
            throw ex;
        }
4

2 回答 2

1

里面的所有类System.Data.SqlClient都用于 SQL Server 数据库而不是 mysql。

在您的代码中,替换SqlCommandMySqlCommand和。SqlConnectionMySqlConnection

编辑:请参阅页面了解课程,您可以在这种情况下使用。

于 2010-07-21T12:32:50.433 回答
0

我做了一些细微的更改,现在出现以下错误。

**

输入字符串不正确

**

这是我使用的存储过程和方法。

-- --------------------------------------------------------------------------------

-- 常规 DDL


分隔符 $$

CREATE DEFINER= Admin@ %PROCEDURE test(IN p_idExceptionLog INT(32),IN p_ExceptionDate DATETIME,IN p_User VARCHAR(45),IN p_ExceptionMessage VARCHAR(4000)

 )

开始

INSERT INTO ExceptionLog
     (
       id                    , 
       Date                  , 
       User                  , 
       Message                                      
     )
VALUES 
     ( 
       p_idExceptionLog                    , 
       p_ExceptionDate                     , 
       p_User                              , 
       p_ExceptionMessage                    
     ) ; 

结尾

  private void showErrorBox(String errorMsg, MessageBoxButtons btnokshow)
    {

        MessageBox.Show(errorMsg, "FS Manager Error", MessageBoxButtons.OK);

        // write to DB

        string username = System.Environment.UserName.ToString();
        string timestamp = DateTime.Now.ToString();

          // Locals
        MySqlConnection NasDB = null;
    //    MySqlCommand inputError1 = new MySqlCommand();
        MySqlCommand inputError = null;
               int rows = 0;
        string spName = "test";

        try
        {
            //Instantiate the DB connection setting the conn string
            using (NasDB = new MySqlConnection(getConnectionString(ConnectionType.NAS)))
            {
                // Instantiate the command object that will fire the SP.
                using (inputError = new MySqlCommand(spName, NasDB))
                {
                    // Finish setting up the command object
                    inputError.CommandType = CommandType.StoredProcedure;

                    // Set up the SP params.

                    inputError.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("p_idExceptionLog", MySql.Data.MySqlClient.MySqlDbType.Int32, (1)));
                    inputError.Parameters[0].Value = "";

                    inputError.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("p_ExceptionDate", MySql.Data.MySqlClient.MySqlDbType.DateTime, (1)));
                    inputError.Parameters[1].Value = timestamp;

                    inputError.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("p_User", MySql.Data.MySqlClient.MySqlDbType.VarChar, (45)));
                    inputError.Parameters[2].Value = System.Environment.UserName.ToString();

                    inputError.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("p_ExceptionMessage", MySql.Data.MySqlClient.MySqlDbType.VarChar, (4000)));
                    inputError.Parameters[3].Value = errorMsg;

                    // Now that the SP is completely set up and ready to go open the conn and fire the SP.
                    inputError.Connection.Open();
                    rows = inputError.ExecuteNonQuery();

                    // Close ASAP
                    inputError.Connection.Close();
                }
            }

        }
        catch (Exception ex)
        {
            //showErrorBox(ex.ToString());
            throw ex;
        }
    }
于 2010-07-21T15:16:42.880 回答