gpt4 book ai didi

C# 我应该在这里投什么类型?

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:25 25 4
gpt4 key购买 nike

我有一部分代码通过从数据库中读取所有先前的费用和付款来计算新的余额,然后将要记入余额的新金额相加。它可以很好地处理我手动输入数据库的值,但是当我删除所有测试值并从头开始时,我开始遇到错误。

这是代码:

        //sum all prior charges
try
{
connection.Open();
command.Connection = connection;

command.CommandText = "SELECT SUM(Amount) FROM Charges WHERE TransactionDate<='" + DateTime.Now + "';";
chargesSoFar = (double)command.ExecuteScalar();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}

// sum all prior payments
try
{
connection.Open();
command.Connection = connection;

command.CommandText = "SELECT SUM(Amount) FROM Payments WHERE TransactionDate<='" + DateTime.Now + "';";
paymentsSoFar = (double)command.ExecuteScalar();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}

// calculate balance
tempCharge.Balance = (decimal)(chargesSoFar + int.Parse(textBoxAmount.Text) - paymentsSoFar);

DataWriter.WriteCharge(tempCharge);

我遇到的错误是我转换 ExecuteScalar 结果的类型转换错误。发生错误是因为没有先前的费用或付款,因此返回 null,在转换为 double 时失败。

有没有我可以转换成的另一种类型,然后我可以检查它是否为空?如果没有,我该如何解决这个问题?

感谢任何帮助。如果我不清楚我在这里要做什么,请提出任何问题。

最佳答案

尝试可空数据类型:

double? chargesSoFar = null;
// other codes here
chargesSoFar = (double?)command.ExecuteScalar();

作为旁注,参数化查询很可能是防止 sql 注入(inject)的最佳实践。为此,

try
{
connection.Open();
command.Connection = connection;

command.CommandText = "SELECT SUM(Amount) FROM Payments WHERE TransactionDate <= @TransData;";
command.Parameter.AddWithValue("TransData", DateTime.Now);
chargesSoFar = (double?)command.ExecuteScalar();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}

根据这个问题:What is the best data type to use for money in c#?

最好使用的数据类型是十进制。

decimal? chargesSoFar = null;
// other codes here
chargesSoFar = (decimal?)command.ExecuteScalar();

关于C# 我应该在这里投什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48803591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com