SqlParameterCollection принимает только ненулевые объекты типа SqlParameter, но не объекты MySqlParameter. - PullRequest
0 голосов
/ 21 июля 2010

Я создал метод, который будет вставлять любые исключения, созданные в таблице «ExceptionLog» на сервере 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;
        }

Спасибо

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Все классы внутри System.Data.SqlClient используются для базы данных SQL Server, а не mysql.

В вашем коде замените SqlCommand на MySqlCommand и SqlConnection на MySqlConnection.

РЕДАКТИРОВАТЬ: см. эту страницу для классов, которые вы можете использовать в этом случае.

0 голосов
/ 21 июля 2010

Я сделал несколько небольших изменений и теперь получаю следующую ошибку.

**

Неправильная строка ввода

**

Это хранимая процедура, которую я использую, и метод.

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

- Обычный DDL


DELIMITER $$

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

 )

BEGIN1025 *

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

END

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