使用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.

请帮。

使用Dataset查找bankbalance

试试这个:在你的代码中做一个小的改变

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。

再次感谢所有帮助我得出这个结论的人。