Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将数据表的值从字符串转换为整数_Sql_.net - Fatal编程技术网

Sql 如何将数据表的值从字符串转换为整数

Sql 如何将数据表的值从字符串转换为整数,sql,.net,Sql,.net,我正在图书馆系统里做一个很好的计算器。在其中,我需要计算某一天的罚款。为此,我使用一个数据表来加载罚款金额,然后,我需要通过添加每个罚款金额来计算罚款总额。但我在将字符串格式的罚款值解析为整数时遇到问题。下面是错误的屏幕截图 这是我用来将字符串值转换成整数并计算罚款总额的代码 int sum1 = 0; int myNum; String Display; private void btnNext_Click(object sender, EventArgs e) {

我正在图书馆系统里做一个很好的计算器。在其中,我需要计算某一天的罚款。为此,我使用一个数据表来加载罚款金额,然后,我需要通过添加每个罚款金额来计算罚款总额。但我在将字符串格式的罚款值解析为整数时遇到问题。下面是错误的屏幕截图

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

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);
        }
}
有什么方法可以解决这个问题吗?

数据库非常擅长计算总和之类的东西。如果
Fine
是数据库中的一个整数,您可以让它对所有行求和,然后返回:

SELECT SUM(Fine) As TotalFine 
FROM BookReceiveMem
WHERE RecDate = @recDate
您可以从代码中调用它,而不需要数据表,如下所示:

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());
在这里,您将获得列并尝试将其转换为整数。实际上,您要做的是获取
值(您不需要
解析它-它已经是一个整数!)


请不要通过将字符串连接在一起来创建SQL查询。您应该始终使用参数化查询,否则SQL注入会带来很大的安全风险。那么我该怎么办?您能给我发送一个示例代码吗?@KalinduPrabash您正在询问ADO.NET文档和教程的链接。事实上,正是这段代码将值转换为字符串,然后尝试解析它。关于这一点,即使不是几百个问题,也有几十个重复的问题——不要这样做。不要对该字段调用
.ToString()
。在您的表
BookReceiveMem
中,字段
的数据类型是什么。如果您像这样使用Datatable提交答案,您将失败。即使您意外地获得了正确的值,一个好的讲师仍然会让您失望。要求您使用ADO.NET从数据库中获取一笔金额。为了让您了解SQL的工作原理,您将使用
SUM()
,而不是尝试将数据加载到DataTable中。对于100个值,
SUM()。您还需要了解各种ADO.NET类之间的差异。执行命令的类是
SqlCommand
myNum = (int)row["Fine"];