繁体   English   中英

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

[英]C# - Using database table to populate variables

编辑:谢谢大家,我想出了如何立即开始工作! 下面的详细信息...

我是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,以从中提取其余的行数据,但我认为这可能会引起问题。

EDIT2:花了我比实际时间更长的时间,但我发现了。 我不得不稍微更改一下代码。

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

我习惯忘记了您可以加入这样的语句。 我创建了一个新项目,该项目仅轮询数据并将其放入我的变量中,然后将其放入文本框,并且通过这种方法,我可以通过为两个不同的按钮分配不同的EnemyID值来轮询两组不同的敌人状态。 概念证明,就在那里。

感谢双方的答复,这两个建议对于使这项工作都同样有用。 :)

那里有许多关于如何使用数据库的教程,前两个教程使用纯数据访问的直接ADO.NET,使您对代码中的交互负责。

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

这些都是最近几年VS 2013中与事物相关的所有链接; 希望能为您提供一个良好的起点。

您可以执行以下操作:

您的SQL应该输入过程名称和EnemyId。

该存储过程select * from Enemies where EnemyId = @EnemyId进行select * from Enemies where EnemyId = @EnemyId

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM