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就足够了——假设每个玩家只有一个数据行。抱歉,你是对的,可以修复