2014-10-16 29 views
0

編輯:謝謝大家,我想出瞭如何讓它現在工作!下面的細節...C# - 使用數據庫表來填充變量

我是一個C#的新手,我試圖通過編程一個非常簡單的RPG遊戲來教我自己的語言。

現在,我正要開始添加不同的敵人進行戰鬥(直到現在我只用一個硬編碼進行測試)。

我已經開始建立一個包含敵方信息的數據庫(一個名稱列,一個惠普陣列,一個常見統計數據和攻擊等)。我擁有它,當你與敵人展開戰鬥時,玩家可以從下拉列表中選擇一個生物,並且他擁有的任何生物都會設置一個名爲「EnemyID」的變量。

我想要做的就是使用EnemyID變量來對應我的數據庫中的一行,然後將每列的值拉入我可以在戰鬥中引用的變量。

這是可以做的事嗎?如果是這樣,有人能以相對簡單的方式向我解釋這個方法嗎?即使只是從任何類型的數據庫導入行數據的一個小例子都可以,我很好的理解代碼,一旦我看到它使用了幾次。

(噢,如果它很重要,我使用Visual Studio Express的2013,我的數據庫是SQL Server Express的2014數據庫。)提前

謝謝!

編輯:

找到了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是一個變量,用於根據菜單選擇分配敵人的戰鬥力。我試圖使用該變量來生成行ID以從其他行中提取數據,但我認爲這可能會導致問題。編輯2:花了我比實際應有的時間更長,但我明白了。我不得不稍微改變我的代碼。

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

我有一種習慣,忘記了你能夠加入像這樣的語句。我做了一個新項目,只調查數據並將其放入我的變量中,然後將其放入文本框中,通過將不同的EnemyID值分配給兩個不同的按鈕,我可以輪詢兩組不同的敵人統計值。概念證明,就在那裏。

感謝這兩位回覆的人,這兩個建議對於使這項工作同樣有用。 :)

+4

爲什麼不告訴我們你到目前爲止做了什麼?和一個簡單的RPG遊戲是一個可怕的入門項目 – Steve 2014-10-16 20:43:01

+0

沒有什麼理由讓我展示自己有什麼 - 我不會得到任何好處,也沒有其他人會感興趣。因爲它是一個「可怕的首發項目「,爲什麼?構建一個能勝任的RPG系統將使用許多不同的功能,我認爲這是學習編程語言的完美方式。 也就是說,只要你不半屁吧,我不是。 – 2014-10-16 23:41:08

回答

4

有很多關於如何使用數據庫的教程,前兩個使用直ADO。NET這是純粹的數據存取,讓你負責其在代碼中的互動:

下兩個,一個是實體,以及其他爲NHibernate的,他們連接到SQL數據庫並通過名爲對象關係映射的進程將對象轉換爲程序中的可用代碼。

這些都是相關的鏈接到的東西,在最新幾年,隨着VS 2013;希望能爲您提供一個很好的起點。

+0

我會給這些教程一看,謝謝! – 2014-10-16 21:49:21

0

你可以做這樣的事情:

你的SQL應該通過在程序名和EnemyId。

存儲過程會做select * from Enemies where EnemyId = @EnemyId

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

dataSet有一個由存儲過程返回的表,你可以檢索你從該表所需要的列。

+0

這可能工作得很好,但正如我所說的,我幾乎是C#的一名新手,所以你說的話還是有點超出我的想象。 – 2014-10-16 22:40:06

+0

嗯,好的,在看到Brian的回覆之後,我讀了一篇關於ADO.NET的非常好的基礎教程。我看到你提到的select語句需要成爲SqlCommand的一部分。我唯一的問題是,哪個部分是哪個?假設我的變量是「EnemyID」,並且我的數據庫中的列只是「ID」。 將語句讀爲「EnemyID = ID」,還是「ID = EnemyID」。我認爲這是後者,但我不確定。 謝謝你的建議! – 2014-10-17 18:19:47

+0

其變量的where子句的哪一側無關緊要。 EnemyId = Id與Id = EnemyId相同 – 2014-10-20 15:48:41