C# C按钮未返回预期值
我有一个windows ATM应用程序,我被困在这一部分: 我把pin和firstName作为私有字符串,把balance作为私有双精度字符串。 但是,当我尝试在文本区域显示余额时,它只打印0。是因为retrieveAccountInformation作为返回项无效吗?如何更改代码,以便在其他方法中使用pin、firstName和balanceC# C按钮未返回预期值,c#,C#,我有一个windows ATM应用程序,我被困在这一部分: 我把pin和firstName作为私有字符串,把balance作为私有双精度字符串。 但是,当我尝试在文本区域显示余额时,它只打印0。是因为retrieveAccountInformation作为返回项无效吗?如何更改代码,以便在其他方法中使用pin、firstName和balance using System; using System.Collections.Generic; using System.ComponentModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SQLDll;
namespace WindowsFormsApplication14
{
public partial class Form1 : Form
{
private Connection myConnection;
private Statement myStatement;
private ResultSet myResultSet;
String databaseURL = "http://www.boehnecamp.com/phpMyAdmin/razorsql_mysql_bridge.php";
public string pin, firstName, userAccountNumber;
public double balance;
public double withdraw = 0;
public double deposit = 0;
bool buttonClicked;
bool buttonClicked2;
public Form1()
{
InitializeComponent();
try
{
//connect to database
SQL sql = new SQL();
myConnection = sql.getConnection(databaseURL);
//create Statement for executing SQL
myStatement = myConnection.createStatement(databaseURL);
loadAccountNumbers();
updateBalance();
}
catch (Exception)
{
Console.WriteLine("Cannot connect to database server");
}
//close statement and database connection
myStatement.close();
myConnection.close();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void setText(string text)
{
}
//load account numbers to ComboBox
private void loadAccountNumbers()
{
//get all account numbers from database
try
{
myResultSet = myStatement.executeQuery("SELECT accountNumber FROM accountInformation");
// add account numbers to ComboBox
while (myResultSet.next())
{
accountNumberComboBox.Items.Add(myResultSet.getString("accountNumber"));
}
myResultSet.close(); // close myResultSet
}//end try
catch (Exception)
{
Console.WriteLine("Error in loadAccountNumbers");
}
}//end method to loadAccountNumbers
private void retrieveAccountInformation()
{
//get account info
try
{
myResultSet = myStatement.executeQuery("SELECT pin, " +
"firstName, balanceAmount FROM accountInformation " +
"WHERE accountNumber = '" + userAccountNumber + "'");
//get next result
if (myResultSet.next())
{
pin = myResultSet.getString("pin");
firstName = myResultSet.getString("firstName");
balance = myResultSet.getDouble("balanceAmount");
}
myResultSet.close(); //close myResultSet
}//end try
catch (Exception)
{
Console.WriteLine("Error in retrieveAccountInformation");
}
}// end method retrieveAccountInformation
//update database after withdrawing
private void updateBalance()
{
//update balance in database
try
{
myStatement.executeUpdate("UPDATE accountInformation" +
" SET balanceAmount = " + balance + " WHERE " +
"accountNumber = '" + userAccountNumber + "'");
}
catch (Exception)
{
Console.WriteLine("Error in updateBalace");
}
}//end method updateBalance
private void accountNumberComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
accountNumberComboBox.Enabled = false;
numberTextField.Text = " ";
messageTextArea.Text = "Enter your PIN #.";
button0.Enabled = true;
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;
button7.Enabled = true;
button8.Enabled = true;
button9.Enabled = true;
buttonDone.Enabled = true;
retrieveAccountInformation();
}
private void button1_Click(object sender, EventArgs e)
{
setText("1");
numberTextField.Text += "1";
buttonEnter.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
setText("2");
numberTextField.Text += "2";
buttonEnter.Enabled = true;
}
private void button3_Click(object sender, EventArgs e)
{
setText("3");
numberTextField.Text += "3";
buttonEnter.Enabled = true;
}
private void button4_Click(object sender, EventArgs e)
{
setText("4");
numberTextField.Text += "4";
buttonEnter.Enabled = true;
}
private void button5_Click(object sender, EventArgs e)
{
setText("5");
numberTextField.Text += "5";
buttonEnter.Enabled = true;
}
private void button6_Click(object sender, EventArgs e)
{
setText("6");
numberTextField.Text += "6";
buttonEnter.Enabled = true;
}
private void button7_Click(object sender, EventArgs e)
{
setText("7");
numberTextField.Text += "7";
buttonEnter.Enabled = true;
}
private void button8_Click(object sender, EventArgs e)
{
setText("8");
numberTextField.Text += "8";
buttonEnter.Enabled = true;
}
private void button9_Click(object sender, EventArgs e)
{
setText("9");
numberTextField.Text += "9";
buttonEnter.Enabled = true;
}
private void button0_Click(object sender, EventArgs e)
{
setText("0");
numberTextField.Text += "0";
buttonEnter.Enabled = true;
}
private void buttonEnter_Click(object sender, EventArgs e)
{
numberTextField.Text = " ";
buttonEnter.Enabled = false;
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = false;
button7.Enabled = false;
button8.Enabled = false;
button9.Enabled = false;
button0.Enabled = false;
buttonBalance.Enabled = true;
buttonWithdraw.Enabled = true;
buttonDeposit.Enabled = true;
messageTextArea.Text = "Welcome," + firstName;
updateBalance();
if (buttonClicked == true)
{
withdraw = Double.Parse(numberTextField.Text);
balance = balance - withdraw;
updateBalance();
}
}
private void buttonBalance_Click(object sender, EventArgs e)
{
retrieveAccountInformation();
updateBalance();
messageTextArea.Text=(balance.ToString());
//display balance to messageTextArea
}
private void buttonWithdraw_Click(object sender, EventArgs e)
{
buttonBalance.Enabled = false;
buttonWithdraw.Enabled = false;
button0.Enabled = true;
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;
button7.Enabled = true;
button8.Enabled = true;
button9.Enabled = true;
messageTextArea.Text = "Enter withdrawal amount:";
buttonClicked = true;
}
private void buttonDone_Click(object sender, EventArgs e)
{
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = false;
button7.Enabled = false;
button8.Enabled = false;
button9.Enabled = false;
button0.Enabled = false;
buttonEnter.Enabled = false;
buttonBalance.Enabled = false;
buttonWithdraw.Enabled = false;
buttonDone.Enabled = false;
buttonDeposit.Enabled = false;
accountNumberComboBox.Enabled = true;
messageTextArea.Text = "Please select your account number.";
}
private void buttonDeposit_Click(object sender, EventArgs e)
{
buttonBalance.Enabled = false;
buttonWithdraw.Enabled = false;
button0.Enabled = true;
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;
button7.Enabled = true;
button8.Enabled = true;
button9.Enabled = true;
messageTextArea.Text = "Enter deposit amount:";
buttonClicked2 = true;
}
}
}因为您正在使用myResultSet.next
如果您有两个SQL语句,例如
从用户中选择*
去
从帐户中选择*
去
如果myResultSet.next->这将读取从第二条SQL语句返回的数据
我想这可能是你想要的:
string connString=AppConfigurationManager.GetAppSettingConnectionString,IsQA;
使用var conn=new SqlConnectionconnString
{
康涅狄格开放大学;
使用SqlCommand SqlCommand=new SqlCommandSELECT引脚+
名字,账户信息中的余额金额+
其中accountNumber='+userAccountNumber+',conn
{
sqlCommand.CommandType=CommandType.Text;
SqlDataReader dr=null;
尝试
{
dr=sqlCommand.ExecuteReader;
当雷德博士
{
pin=dr.getStringpin;
firstName=dr.getStringfirstName;
余额=dr.getDoublebalanceAmount;
}
}
捕获SqlException-ex
{
}
捕获异常
{
}
最后
{
//清理访问数据的资源
如果dr!=null
{
克洛斯博士;
}
}
}
因为pin、firstName、balance是局部变量,而此方法是私有void,所以如果要从void方法中获取值,请使用in、out变量。这使方法可以返回多个值 此外,updateBalance做什么?它声明变量并调用retrieveAccountInformation方法 例如:
private void retrieveAccountInformation(out string pin,out string firstname,out double balance)
{
//get account info
try
{
myResultSet = myStatement.executeQuery("SELECT pin, " +
"firstName, balanceAmount FROM accountInformation " +
"WHERE accountNumber = '" + userAccountNumber + "'");
//get next result
if (myResultSet.next())
{
pin = myResultSet.getString("pin");
firstName = myResultSet.getString("firstName");
balance = myResultSet.getDouble("balanceAmount");
}
myResultSet.close(); //close myResultSet
}//end try
catch (Exception)
{
Console.WriteLine("Error in retrieveAccountInformation");
}
}// end method retrieveAccountInformation
private void buttonBalance_Click(object sender, EventArgs e)
{
string pin, firstname;
double balance;
retrieveAccountInformation(pin, firstname, balance);
messageTextArea.Text=(balance.ToString());
//display balance to messageTextArea
}
在我看来,你可以使用out或ref
private void retrieveAccountInformation(out string pin, out string firstname, out double balance)
{
//get account info
try
{
myResultSet = myStatement.executeQuery("SELECT pin, " +
"firstName, balanceAmount FROM accountInformation " +
"WHERE accountNumber = '" + userAccountNumber + "'");
//get next result
if (myResultSet.next())
{
pin = myResultSet.getString("pin");
firstName = myResultSet.getString("firstName");
balance = myResultSet.getDouble("balanceAmount");
}
myResultSet.close(); //close myResultSet
}//end try
catch (Exception)
{
Console.WriteLine("Error in retrieveAccountInformation");
}
}// end method retrieveAccountInformation
private void buttonBalance_Click(object sender, EventArgs e)
{
string pin = "";
string firstname = "";
double balance = 0;
retrieveAccountInformation(out string pin, out string firstname, out double balance);
updateBalance();
messageTextArea.Text=(balance.ToString());
//display balance to messageTextArea
}
平衡声明在哪里?您是否使用调试器检查了代码并检查了平衡是否等于您在跨过分配位置后预期的平衡?我也尝试将retrieveAccountInfo;添加到我的buttonBalance\u click方法中,但这没有改变任何内容。它仍然显示0。如果显示0,则平衡必须为0,因为at是放在messageTextArea文本框中的内容。在不知道updateBalance做什么的情况下提供帮助是很困难的…正如Simon所说,逐步完成代码并查看调用堆栈以确保按正确的顺序执行方法。我的代码中只有我的公共部分类form1中的私有双平衡,然后e line balance=myResultSet.getDoublebalanceAmount;在检索方法中,您是否尝试使用调试器查看balance=myResultSet.getDoublebalanceAmount;是否获取非0值?这些变量声明为类范围,它们不是该方法的私有变量,否则代码将无法编译。我没有否决您的意见,但pin、firstName、balance是成员变量,作用域不能是局部的。好吧,我同意。我不知道,但他调用了一个void方法,没有返回任何值,这样类范围内的变量就可以得到新值。好吧,你修改的代码部分是我的教授给我的。所以我假设他希望我坚持他给我的hod retrieveAccountInfo接受0个参数是第一个您必须使用相同参数调用retrieveAccountInformation的参数。可能您调用retrieveAccountInformation时没有参数。当然,它给了您错误,因为该方法现在有三个参数。请参阅我以前编写的buttonBalance\u Click中的示例。哦,我的错误..只是r调用retrieveAccountInformation时删除类型数据..就像这样写retrieveAccountInformation out pin,out firstname,out balance;现在唯一的错误是pin,firstname和balance后面预期的标识符只需使用ref,dont out。out关键字需要指定默认值。如果要使用out,必须指定defaule值。如果不要指定默认值,您应该使用ref。哦,您应该查看参数名should firstName,并且您必须在try catch语句之外指定默认值。希望它能回答您的问题