C# - 使用数据库表填充变量

时间:2014-10-16 20:40:28

标签: c# sql database

编辑:谢谢大家,我想出了如何让它立即发挥作用!详情如下......

我是C#的新手,我正试图通过编写一个非常简单的RPG游戏来自学这门语言。

现在,我正处于想要开始添加不同敌人进行战斗的地步(到目前为止,我只使用了一个硬编码进行测试)。

我已经开始设置一个包含敌人信息的数据库(一列用于名称,一列用于HP,一列用于常见统计和攻击等)。我有它,所以当你开始与敌人战斗时,玩家可以从下拉列表中选择一个生物,而他所拥有的任何生物都会设置一个名为“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值来轮询两组不同的敌人统计数据。概念证明,就在那里。

感谢两位回复的人,这两项建议对于让这项工作同样有用。 :)

2 个答案:

答案 0 :(得分:4)

有很多关于如何使用数据库的教程,前两个使用直接ADO.NET,它是纯数据访问,使你负责代码中的交互:

接下来的两个,一个用于实体,另一个用于nHibernate,它们连接到SQL数据库,并通过称为对象关系映射的过程将对象转换为程序中的可用代码。

这些都是最新年份与VS 2013相关的所有相关链接;希望这能为你提供一个良好的起点。

答案 1 :(得分:0)

您可以这样做:

您的SQL应该传递过程名称和EnemyId。

存储过程会执行select * from Enemies where EnemyId = @EnemyId

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

dataSet具有存储过程返回的表,您可以从该表中检索所需的列。