ExecuteNonQuery() не отвечает/не работает

У меня проблема с моим приложением, которое раньше работало. Мое приложение подключается к базе данных Oracle. На данный момент я хочу добавить новую учетную запись. В моем коде С# у меня есть класс базы данных со следующим методом:

public void AddAccount(string name, string addres, string username, string password)
{
    string query = "insert into account(id, name, addres, username, password, datecreated, game_id) values(account_seq.nextval,:name,:addres,:username,:password, sysdate, 1)";

        OpenConnection();
        try
        {
            OracleCommand command = new OracleCommand(query, connection);
            OracleParameter[] parameters = new OracleParameter[]
            {
                new OracleParameter(":name", name),
                new OracleParameter(":addres", addres),
                new OracleParameter(":username", username),
                new OracleParameter(":password", password)
            };
            command.Parameters.AddRange(parameters);
            command.ExecuteNonQuery();
            System.Windows.Forms.MessageBox.Show("Welcome " + username + "! You can now login with your new account.");
        }
        catch (OracleException ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
        CloseConnection();
    }

Вот мой метод OpenConnection, который подключает меня к базе данных:

public bool OpenConnection()
            {
                try
                {
                    connection = new OracleConnection();
                    String user = "***";
                    String pw = "***";
                    connection.ConnectionString = "User Id=" + user + ";Password=" + pw + ";Data Source=" + " //localhost:1521/xe" + ";"; //orcl is de servicename (kan anders zijn, is afhankelijk van de Oracle server die geinstalleerd is. Mogelijk is ook Oracle Express: xe
                    //System.Windows.Forms.MessageBox.Show("Connectie met database");
                    connection.Open();
                    //System.Windows.Forms.MessageBox.Show("Test");
                    return true;

                }
                catch (OracleException)
                {
                    return false;
                }
            }

И, наконец, вот метод из моей основной формы, где я хочу добавить нового члена:

private void btnRegister_Click(object sender, EventArgs e)
{
    database = new Database();
    database.AddAccount(tbRegisterName.Text, tbRegisterAddress.Text, tbRegisterUsername.Text, tbRegisterPassword.Text);
    database.AddAchievement1();
}

Мое соединение с базой данных работает, и я проверил его с помощью окна сообщений. Также с моей формы все работает. Странно то, что он не проходит дальше Command.ExecuteNonQuery(); Он не выдает ошибку или что-то в этом роде. Просто зависает/вылетает.

Все данные в параметрах правильные, и, как я уже сказал, это работало раньше. Поэтому мне очень странно, что сейчас это не работает. Я ничего принципиального не менял.

По моему опыту, метод ExecuteNonQuery() может дать сбой, если у вас нет подключения к Inet или база данных не подключена к приложению. Но ни одно из них не соответствует действительности. Поэтому мне было интересно, знает ли кто-нибудь из вас, экспертов, в чем может быть проблема.


person Maxime de Lange    schedule 21.09.2015    source источник


Ответы (2)


Если OpenConnection() терпит неудачу, вы не получаете обратной связи в AddAccount().

Пытаться:

public void AddAccount(string name, string addres, string username, string password)
{       ....
      if (OpenConnection())
      {
         ///continue
      }
      else
      {
        ///log error
      }
}

Этот подход может указать, в чем заключается ваша проблема.

person apomene    schedule 21.09.2015

Вероятно, это потому, что вы неправильно используете параметры. Удалите двоеточия перед такими именами переменных:

new OracleParameter ("name", name);
new OracleParameter ("addres", addres); // etc

Но оставьте двоеточия в запросе.

Вот некоторая информация по этой теме:
MSDN :System.Data.OracleClient.OracleCommand.Parameters MSDN:System.Data.OracleClient.OracleParameter

person SplittyDev    schedule 21.09.2015