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