尝试通过C#在数据库上选择时出现IndexOutOfRangeException

时间:2019-02-09 14:59:33

标签: c# sql sql-server unity3d

对不起,如果这听起来不愉快。 我正在尝试通过使用C#和SQL Server中的数据库在Unity上进行测验游戏。 在这一部分中,我试图显示最高分数,所以我做了一段代码来选择数据库中的最高分数:

  public bool BuscarScoreFinal1()
    {
        SqlDataReader dataReader = null;

        if (RunQuery(string.Format("SELECT MAX (PlayerScore1) FROM ScoreQuiz1", tableScoreQuiz1), ref dataReader))
        {
            while (dataReader.Read())
            {
                id1 = dataReader.GetInt32(dataReader.GetOrdinal("ID"));
                PlayerName1 = dataReader.GetString(dataReader.GetOrdinal("PlayerName1"));
                PlayerScore1 = dataReader.GetInt32(dataReader.GetOrdinal("PlayerScore1"));

                break;
            }
        }

        if (dataReader != null) dataReader.Close();

        return true;
    }

然后,我尝试在此脚本中以UI文本形式打印数据:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UpdateScore : MonoBehaviour
{

    public GameObject Question3Display;
    public Text yourText;
    public bool Buscardados13;

    // Use this for initialization
    void Start()
    {
        Buscardados13 = GameObject.Find("DatabaseConnection").GetComponent<DatabaseInterface>().Connect() == true;
        Buscardados13 = GameObject.Find("DatabaseConnection").GetComponent<DatabaseInterface>().BuscarScoreFinal1() == true;
        yourText.text = Question3Display.GetComponent<DatabaseInterface>().PlayerScore1.ToString();
    }

    // Update is called once per frame
    void Update()
    {

    }
}

这给了我这个错误:

  

IndexOutOfRangeException:ID   System.Data.ProviderBase.BasicFieldNameLookup.GetOrdinal(System.String fieldName)(在<8012ff544f1c4cb384c200861f770215>:0)   System.Data.SqlClient.SqlDataReader.GetOrdinal(System.String名称)(位于<8012ff544f1c4cb384c200861f770215>:0)   DatabaseInterface.BuscarScoreFinal1()(在Assets / Scripts / DatabaseInterface.cs:621)   UpdateScore.Start()(位于Assets / Scripts / UpdateScore.cs:17)

我认为该错误不是选择错误表的连接问题,因为如果我尝试其他查询(例如,只是一个简单的选择),它将不会出错。 我不认为我写的查询不好,因为它在SQL Server中有效。 这是我要访问的表;

Here's a screenshot of the table i'm using

3 个答案:

答案 0 :(得分:6)

我只能推测-因为您不显示数据-但我很确定您要这么做:

SELECT TOP (1) Id, PlayerName1, PlayerScore1
FROM ScoreQuiz1
ORDER BY PlayerScore1 DESC;

您不能真正访问SELECT中未包含的列。

答案 1 :(得分:0)

我认为可能是因为您的查询就像

SELECT MAX (PlayerScore1) FROM ScoreQuiz1

但是您正在尝试访问其他列,例如ID, PlayerName1 and PlayerScore1

因此,也许尝试类似

SELECT ID, PlayerName1, PlayerScore1
FROM ScoreQuiz1 
ORDER BY PlayerScore1 DESC
LIMIT 1;

希望这会有所帮助!干杯!

答案 2 :(得分:0)

此外,DataReader.Read方法从查询结果中获取一行,然后您可以通过将列的名称或序号传递给DataReader来访问返回行的每个。文件here