Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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/4/sql-server-2008/3.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
C# 将数据库值转换为变量形式c_C#_Sql Server_Database - Fatal编程技术网

C# 将数据库值转换为变量形式c

C# 将数据库值转换为变量形式c,c#,sql-server,database,C#,Sql Server,Database,我正在开发一个板球模拟,我需要从球员数据中检索某些统计数据。我有以下代码 public List<float> BattingData() { con.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString.ToString(); string query = "SELECT [IN

我正在开发一个板球模拟,我需要从球员数据中检索某些统计数据。我有以下代码

public List<float> BattingData()
    {
        con.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString.ToString();
        string query = "SELECT [INNS], [NOT OUTS], [AVG] FROM [" + batTeam + "] WHERE [Player] = '" + name + "';";

        SqlCommand com = new SqlCommand(query, con);

        con.Open();

        using (SqlDataReader reader = com.ExecuteReader())
        {
            if(reader.HasRows)
            {
                while (reader.NextResult())
                {
                    Innings = Convert.ToInt32(reader["INNS"]);
                    NotOuts = Convert.ToInt32(reader["NOT OUTS"]);
                    Avg = Convert.ToSingle(reader["AVG"]);
                }
            }
        }
        con.Close();

        OutRatePG = (Innings = NotOuts) / Innings;
        OutRatePB = OutRatePG / 240;
        RunsPB = Avg / 240;

        battingData.Add(OutRatePB);
        battingData.Add(RunsPB);

        return battingData;
    }

我得到的错误是,当我尝试按“Innings”除法时,它表示不能被零除,因此我认为变量返回为零,并且没有数据分配给它们。

在数据库记录中检查Innings的值是否为0 您也可以在执行任何操作之前尝试以下代码

>ifInnings>0{OutRatePG=局数-不局数/局数;}


这一行就是问题所在:

而reader.NextResult

这样做的目的是将读取器移动到下一个结果集,忽略其余未读的行。要将读卡器前进到下一行,您需要调用reader.Read

您的代码还有一些其他问题:

似乎每个团队都有一个单独的表。这是不正确的数据库设计。您应该创建一个包含每个团队的团队表,然后将TeamResults表外键到该表中。使用内部联接查询它。 您正在将用户输入的值连接到查询。这使您容易受到SQL注入攻击。改用参数。不能参数化表名,另一个原因是应按上述步骤1进行。 您不需要检查HasRows。如果没有行,Read将返回false。 看起来你只想要一排。如果是这种情况,您不需要whilereader.Read循环,而需要ifreader.Read。如果只需要一个值,可以重构代码以使用command.ExecuteScalar。
查看你的数据库,看看局数是否为0,你认为这条线的出局率是多少pg=Innings=NotOuts/Innings;做你确定要键入第二个=符号吗?卡米洛-这是我的错,应该是“-”你需要对局数求和:局数+=转换.ToInt32reader[INNS];另外,请阅读SQL注入,您的查询很容易暴露于此。您应该始终参数化查询,尤其是验证/清除任何帖子中的输入数据。他不能使用ExecuteScalar,因为他在同一记录集中返回多个值。我怀疑OP根本不需要while循环:可能如果reader.Read就足够了——假设每个玩家只有一个数据行。抱歉,你是对的,可以修复