IndexOutOfRangeException при попытке выбрать базу данных с помощью C # - PullRequest
0 голосов
/ 09 февраля 2019

извините, если это звучит нубистски.Я пытаюсь создать викторину на Unity с использованием C # и базы данных в SQL Server.В этой части я пытаюсь показать наивысший балл, поэтому я сделал код для выбора максимума в базе данных:

  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;
    }

Затем я пытаюсь напечатать данные в тексте пользовательского интерфейса в этом скрипте:

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) (at <8012ff144f1c4c8670702: 7038200704c384c2004)0) System.Data.SqlClient.SqlDataReader.GetOrdinal (имя System.String) (в <8012ff544f1c4cb384c200861f770215>: 0) DatabaseInterface.BuscarScoreFinal1 () (в Активах / Сценариях / DatabaseInterface.cs: 621) (обновление: 621)/Scripts/UpdateScore.cs:17)

Я думаю, что эта ошибка не является проблемой подключения при выборе неправильной таблицы, потому что, если я попробую другой запрос (например, просто простой выбор)это работает без ошибок.Я не думаю, что я написал запрос плохо, потому что он работает в SQL Server.Вот таблица, к которой я пытаюсь получить доступ;

Вот скриншот таблицы, которую я использую

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Я думаю, вероятно, потому что ваш запрос похож на

SELECT MAX (PlayerScore1) FROM ScoreQuiz1

Но вы пытаетесь получить доступ к другим столбцам, например ID, PlayerName1 and PlayerScore1

Итак, возможно, попробуйте что-то вроде

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

Надеюсь, это поможет!Ура!

0 голосов
/ 09 февраля 2019

Кроме того, метод DataReader.Read получает строку из результатов запроса, а затем вы можете получить доступ к каждому столбцу возвращенной строки , передав имя или порядковый номер столбца в DataReader.Документы здесь

0 голосов
/ 09 февраля 2019

Я могу только строить предположения - потому что вы не показываете данные - но я уверен, что вы хотите:

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

Вы не можете получить доступ к столбцам, которые не включены вSELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...