使用Dataset查找bankbalance
本文关键字:bankbalance 查找 Dataset 使用 | 更新日期: 2023-09-27 18:13:49
作为一个业余项目,我正在开发一个基本的银行系统,使用c#和WPF来创建表单。
目前,我有四个表单和两个不同的全局类。
表格如下:
- 欢迎页面;此表单用于创建存储在BankData.cs中的初始数据集。我所有的数据库表都存储在这里-表名为UserData。
- 验证用户;用户在此表单中输入账号和密码。我在这里做一些验证,以确保它是6个字符,只有整数等。然后我调用Global.cs类,它有一个方法来选择DB并登录用户(检查它是否匹配)。如果是,那么我将AccountNumber和PIN存储在BankData.cs类中。
- 选项形式;这个表单只是简单的三个按钮,目前进入显示平衡表单。
- 显示平衡;此表单应该显示该用户当前的余额和剩余提款限额(250英镑),尽管当他们提款更多时,这一限额会下降。他们不能提取更多的钱)。
我的问题是,当我试图显示当前余额。我尝试通过将其转换为数据表来使用linq查询数据集。然而,当我试图显示余额时,我得到的是这个而不是余额:
System.Linq.Enumerable + WhereSelectEnumerableIterator ' 2 system . string] [System.Data.DataRow,
我将所有内容转换为字符串,它不会改变此消息。我还尝试返回余额的整数值,但这会导致编译器错误。
我已经附上了应该在Options Form类的标签上显示余额的代码,以及在BankData.cs
中查找余额的代码。BankData.cs
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where (string)dr["AccountNo"] == accountNumber
select dr.Table.Rows[5].ToString());
//return dt.Rows[rowNum][columName].ToString();
return id.ToString();
}
DisplayBalance cs:
lblcurBal.Content = "Current Balance: " + BankData.FindBalance();
//Find the Balance of the Account Number here.
请帮。
试试这个:在你的代码中做一个小的改变
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where dr["AccountNo"] == accountNumber
select dr["BalanceColumnName"]).FirstOrDefault();
return id.ToString();
}
编辑:这就是保罗在下面的评论中所描述的:
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where Convert.ToString(dr["AccountNo"]) == accountNumber
select dr["BalanceColumnName"]).FirstOrDefault();
return id.ToString();
}
在这种特殊情况下,您需要使用id.FirstOrDefault();
而不是id.ToString();
作为返回值,因为FirstOrDefault
实际上从您的linq查询中获取数据,而ToString
只是查询内部字符串表示。
换句话说,变量id
的值不是你写的查询的结果,它是查询本身。FirstOrDefault
从这个查询中检索第一个结果。
问题是id
是一个枚举,它是一个值的集合,看起来像你期望的单个值。
假设 DataTable
的第6列表示余额,
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where (string)dr["AccountNo"] == accountNumber
select dr[5].ToString()).FirstOrDefault();
//return dt.Rows[rowNum][columName].ToString();
return id== null? "" : id;
}
您需要从集合中获取结果,使用FirstOrDefault()
return Convert.ToString(id.FirstOrDefault());
你实际上是在迭代器上调用ToString
,而不是实际获得结果。
我得到了这个工作基于解决方案由vedbhawsar。
将BankData.cs类上的代码更改为:
var id = (from DataRow dr in dt.Rows
where Convert.ToString(dr["AccountNo"]) == accountNumber
select dr["Balance"]).FirstOrDefault();
return id.ToString();
它允许我显示已登录用户的余额。
非常感谢;现在我只需要重复这个操作来取最小剩余余额。当它不起作用时期待我回来lol。
再次感谢所有帮助我得出这个结论的人。