2014-10-16 3 views
0

EDIT: Спасибо всем, я понял, как заставить его работать сейчас! Подробности ниже ...C# - Использование таблицы базы данных для заполнения переменных

Я как бы новичок на C#, и я пытаюсь научить себя языку, программируя очень простую игру RPG.

Прямо сейчас, я нахожусь в точке, где я хочу начать добавлять разных врагов, чтобы сражаться (до сих пор я использовал только один жесткий диск для тестирования).

Я начал настраивать базу данных с информацией о враге (один столбец для имени, один для HP, один для общей статистики и атак и т. Д.). У меня это так, что, когда вы начинаете сражаться с врагом, игрок может выбрать существо из выпадающего списка, и какое бы то ни было существо, он установит переменную под названием «EnemyID».

Что я хочу сделать, это использовать переменную EnemyID для соответствия строке в моей базе данных, а затем вывести значение каждого столбца в переменные, которые я могу ссылаться во время боя.

Это что-то, что можно сделать? Если да, может ли кто-нибудь объяснить мне метод в относительно простых выражениях? Даже небольшой пример того, как импортировать данные строк из любой базы данных, я хорошо понимаю код, как только я вижу его в использовании несколько раз.

(Ах да, если это имеет значение, я использую Visual Studio Express 2013, и моя база данных представляет собой базу данных 2014 SQL Server Express.)

Спасибо заранее!

EDIT:

После поиска простого учебника для ADO.NET, и следуя предложению от одного из плакатов, я придумал следующий код.

public void DataPoll() 
    { 
     SqlConnection MonDat = new SqlConnection("Data Source=(local); 
       Initial Catalog=TestDatabase;Integrated Security=SSPI"); 
     SqlDataReader rdr = null; 
     try 
     { 
      MonDat.Open(); 
      SqlCommand cmd = new SqlCommand(
       "select * from Monsters where Id = EnemyID", MonDat); 
      rdr = cmd.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       EnemyIDBuffer = (int)rdr["Id"]; 
       EnemyName = (string)rdr["Name"]; 
       EnemyHPBase = (int)rdr["HP"]; 
       EnemyAtkBase = (int)rdr["Atk"]; 
       EnemyDefBase = (int)rdr["Def"]; 
       EnemyMagBase = (int)rdr["Mag"]; 
       PrimAtk = (string)rdr["PrimAtk"]; 
       SecoAtk = (string)rdr["SecoAtk"]; 
       TertAtk = (string)rdr["TertAtk"]; 
       RareAtk = (string)rdr["RareAtk"]; 
      } 
     } 
     finally 
     { 
      if (rdr != null) 
      { 
       rdr.Close(); 
      } 
      if (MonDat != null) 
      { 
       MonDat.Close(); 
      } 
     } 
    } 

Однако, когда я пытаюсь запустить его, моя программа останавливается и падает. Я предполагаю, что у меня что-то настроено неправильно (я просто взял сценарий из учебника и немного изменил его). Может ли кто-нибудь дать мне понять, где я ошибся?

EnemyID - это переменная, которую я использовал, чтобы назначить, с каким противником бороться, на основе выбора меню. Я пытаюсь использовать эту переменную для генерации идентификатора строки, чтобы вытащить остальную часть данных строки, но я думаю, что это может вызвать проблему.

EDIT2: Мне потребовалось больше времени, чем нужно, но я понял это. Мне пришлось немного изменить свой код.

   SqlCommand cmd = new SqlCommand(
       "select * from Monsters where Id = " + EnemyID, MonDat); 

У меня есть привычка забывать, что вы можете присоединиться к таким заявлениям. Я сделал новый проект, который только опросил данные и бросил их в мои переменные, а оттуда помещал их в текстовые поля, и с помощью этого метода я смог опросить два разных набора статистики врагов, присвоив разные значения EnemyID двум различным кнопкам. Доказательство концепции, прямо там.

Спасибо всем, кто ответил, оба предложения были одинаково полезны для этого. :)

+4

Почему бы нам не показать, что вы сделали до сих пор ?? и tbh простая игра RPG - это ужасный стартовый проект. – Steve

+0

У меня нет никакой причины показать, что у меня есть - я не получу никакой пользы, и никто больше не будет интересоваться. Поскольку это для того, ужасный стартовый проект ", почему? Создание компетентной системы RPG будет использовать так много разных функций, я думаю, что это идеальный способ изучить язык программирования. То есть до тех пор, пока вы не будете окутывать его, а я нет. –

ответ

4

Существует множество руководств о том, как использовать базу данных, первые две используют прямой ADO.NET, который является чистым доступом к данным, что делает вас ответственными за его взаимодействие в коде:

Следующие два, один для лица, а другая для NHibernate, они подключиться к базам данных SQL и преобразовать объекты в полезный код в вашу программу с помощью процесса, называемого реляционным сопоставлением объектов.

Это все соответствующие ссылки на материал в самые последние годы, с VS 2013; надеюсь, это даст вам хорошую отправную точку.

+0

Я расскажу об этих учебниках, спасибо! –

0

Вы можете сделать что-то вроде этого:

Ваш SQL должен передать имя процедуры и EnemyId.

Хранимая процедура будет делать select * from Enemies where EnemyId = @EnemyId

DataSet dataSet = HSPDataAccessProxy.Instance.ExecuteDataSet(sql); 

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

+0

Это может работать нормально, но, как я уже сказал, я довольно много новичков на C#, так что вы говорите, что все еще немного выше моей головы. –

+0

А, хорошо, я прочитал действительно хороший базовый учебник по ADO.NET, увидев ответ Брайана выше. Я вижу, что упомянутый вами оператор select должен быть частью SqlCommand. Мой единственный вопрос, какая именно часть? Скажем, моя переменная - «EnemyID», а мой столбец в моей базе данных - это «ID». Будет ли инструкция читать «где EnemyID = ID», или это будет «где ID = EnemyID». Я думаю, что это последнее, но я не уверен. Благодарим за предложение! –

+0

Не имеет значения, в какой части аргумента where ваша переменная. EnemyId = Id такой же, как Id = EnemyId –

Смежные вопросы