ExecuteNonQuery()没有响应/工作

时间:2015-09-21 09:33:08

标签: c# database database-connection executenonquery

我的应用程序有问题,之前有用过。我的应用程序连接到Oracle数据库。目前我想添加一个新帐户。在我的C#代码中,我有一个数据库类,其中包含以下方法:

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();它不会出错或什么的。它只是挂起/崩溃。

参数中的所有数据都是正确的,就像我说的那样,它之前已经有效了。所以我发现它现在不起作用很奇怪。我没有改变任何关键的东西。

根据我的经验,如果您没有Inet连接或数据库未连接到应用程序,则ExecuteNonQuery()方法可能会失败。但这些都不是真的。所以我想知道你们是否有专家知道问题出在哪里。

2 个答案:

答案 0 :(得分:0)

如果OpenConnection()失败,您将无法在AddAccount()中收到任何反馈。

尝试:

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

这种方法可以指出问题所在。

答案 1 :(得分:0)

可能是因为您使用了错误的参数。 在变量名之前删除冒号:

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

但请将冒号留在查询中。

以下是有关此主题的一些信息:
MSDN:System.Data.OracleClient.OracleCommand.Parameters MSDN:System.Data.OracleClient.OracleParameter