【问题标题】:ExecuteNonQuery() not responding/workingExecuteNonQuery() 没有响应/工作
【发布时间】:2015-09-21 09:33:07
【问题描述】:

我的应用程序有问题,以前可以用。我的应用程序连接到 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() 方法可能会失败。但这些都不是真的。所以我想知道你们中是否有任何专家知道问题出在哪里。

【问题讨论】:

    标签: c# database database-connection executenonquery


    【解决方案1】:

    如果OpenConnection() 失败,您在AddAccount() 中不会收到任何反馈。

    试试:

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

    这种方法可以指定您的问题所在。

    【讨论】:

      【解决方案2】:

      这可能是因为你使用了错误的参数。 像这样删除变量名称之前的冒号:

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

      但在查询中保留冒号。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-04
        相关资源
        最近更新 更多