首页 > 解决方案 > 如何将数据表的值从字符串转换为整数

问题描述

我正在图书馆系统中制作精美的计算器。在其中,我需要计算给定日期的罚款。为此,我使用数据表加载罚款金额,然后,我需要通过添加每个罚款金额来计算总罚款金额。但是我在将字符串格式的罚款值解析为整数时遇到问题。这是错误的屏幕截图。

这是错误的屏幕截图。

这是我用来将字符串值转换为整数并计算总罚款的代码。

int sum1 = 0;
int myNum;       
String Display;

private void btnNext_Click(object sender, EventArgs e)
{
    try
    {
        if (rbtnToday.Checked == true)
        {
            DateTime today = DateTime.Today;
            Con.Open();
            String select_today_query = "SELECT Fine FROM BookReceiveMem WHERE RecDate='" + today + "'";
            Sqlda = new SqlDataAdapter(select_today_query, Con);
            DataTable Dt = new DataTable();
            Sqlda.Fill(Dt);
            Con.Close();
            foreach (DataRow row in Dt.Rows)
            {
                myNum = int.Parse(Dt.Columns[0].ToString());
                sum1 = sum1 + myNum;
            }
            Display = sum1.ToString();
            MessageBox.Show("Today Fine Amount is= " + Display, "Today Fine Calculation", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
}

有什么方法可以解决这个问题吗?

标签: sql.net

解决方案


数据库非常擅长计算总和之类的东西。如果Fine是数据库中的整数,您可以将其汇总所有行并返回:

SELECT SUM(Fine) As TotalFine 
FROM BookReceiveMem
WHERE RecDate = @recDate

您可以从代码中调用它而无需 DataTable,如下所示:

using(var cmd = Con.CreatCommand())
{
    cmd.CommandText = "SELECT SUM(Fine) As TotalFine FROM BookReceiveMem WHERE RecDate = @recDate";
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add("@recDate",DateTime.Today);
    var result = (int)cmd.ExecuteScalar();
    MessageBox.Show("Today Fine Amount is= " + result, "Today Fine Calculation", MessageBoxButtons.OK, MessageBoxIcon.Information);

}   

请注意,上面使用参数化查询比使用字符串连接 更安全


但是,更直接地回答您的问题:

myNum = int.Parse(Dt.Columns[0].ToString());

在这里,您获得了Column并尝试将其转换为整数。你真正想要做的是获得row价值(你不需要Parse它 - 它已经是一个整数!)

myNum = (int)row["Fine"];

推荐阅读