0

请先阅读编辑 2。

我在 MySQL 中有 3 个表。用户、游戏、用户游戏。

    userId int(3) NOT NULL auto_increment Primary key,
    userName VARCHAR(20) NOT NULL,
    firstName VARCHAR(20) NOT NULL,
    lastName VARCHAR(20) NOT NULL,
    emailAddress VARCHAR(50) NOT NULL,
    password VARCHAR(20) NOT NULL

在这种情况下,让我们使用这个用户表。

我想创建一个 DataObject Users 来保存我存储在数据库中的信息。

我不太确定如何创建 DataObject,因为我将在整个程序中调用 DataObject。我目前正试图让他们为登录页面工作。

在我的 c#Users.cs 中,我只有这个......

    public String usersId { get; set; }
    public String userName { get; set; }
    public String firstName { get; set; }
    public String lastName { get; set; }
    public String emailAddress { get; set; }
    public String password { get; set; }

对于如何从数据库中获取字段,我有点不知所措。会用 sql 命令和查询来完成吗?我很茫然。

编辑 1:我已经阅读了有关直接数据库访问的更多信息,并且我已经获得了相当多的信息。但现在我要提出一个更具体的问题。

在我的 Login.aspx.cs 页面中,我将 6 个值传递给上面列出的用户表,当我尝试在 try catch 中执行查询时,它会直接进入 catch。我将在下面发布代码。

    if(txtNewPass.Text.Equals(txtVerifyNewPass.Text))
            {
                MySqlConnection dbcon;
                string cstr = "Server=localhost;User ID=root; Password=; Database=finalgame;";



                dbcon = new MySqlConnection(cstr);
                dbcon.Open();
                string inse = "insert into users (userName, firstName, lastName, emailAddress, password) values(@username, @firstname, @lastname, @emailadd, @password) ";
                MySqlCommand insertuser = new MySqlCommand(inse, dbcon);
                insertuser.Parameters.AddWithValue("@username", txtNewUserName.Text);
                insertuser.Parameters.AddWithValue("@fullname", txtFirstName.Text);
                insertuser.Parameters.AddWithValue("@lastname", txtLastName.Text);
                insertuser.Parameters.AddWithValue("@emailadd", txtEmail.Text);
                insertuser.Parameters.AddWithValue("@password", txtNewPass.Text);



                try
                {
                    insertuser.ExecuteNonQuery();
                    dbcon.Close();
                    Response.Redirect("login.aspx");
                }
                catch (Exception ex)
                {
                    Response.Write("<b>something really bad happened.....Please try again</b> ");
                }
            }
            else
            {
                //error incorrect pass
                Console.WriteLine("the passwords do not match");
            }

在我到达 insertuser.ExecuteNonQuery 之前,这一切似乎都正常工作,这就是它直接进入捕获点的时候。我刚刚注意到 lastInsertedId 是-1,我不知道这是否重要,但似乎值得发布。

我需要为 auto_incremented id 传入一个空白参数吗?

编辑2:!!!我回头一看,意识到我有一些错字,很抱歉进行了额外的编辑。现在一切都很好。感谢大家的帮助。

4

2 回答 2

1

您实际上有两个选择,直接数据库访问或 Brian 提到的 ORM。

直接数据库访问似乎相对简单,您为 MySQL 添加 .Net 适配器,连接到您的数据库并执行您的语句。但是,您需要确保正确处理连接(打开、关闭)、准备好的语句等。

直接数据库访问是一种选择,如果

  • 在迁移到 ORM 之前,您有兴趣了解具体细节
  • 您需要使用直接访问(无论出于何种原因)

使用 ORM 可以大大简化事情。我已经将 EntityFramework 与 MySQL 一起使用,问题很少。

ORM 是一个选项,如果

  • 您需要使用它(无论出于何种原因)
  • 您已完成直接访问并想尝试 ORM

ORM 所做的一件事是采用关系模型并将其转换为类结构。这将允许您使用对象表示法访问您的数据库db.userName = "Bob Lablaw";,然后通过调用SaveChanges();

例如,我使用以下内容将包信息保存到 MySQL 数据库中:

  var insert = new packageinfo
                             {
                                 OrderNumber = orderNum,
                                 PackageType = packageType,
                                 ShipCarrier = shipCarrier,
                                 ShipService = shipService,
                                 TrackingNumber = trackingNumber,
                                 ShipFromAddress = shipFromAddress1,
                                 ShipFromAddress2 = shipFromAddress2,
                                 ShipFromCity = shipFromCity,
                                 ShipFromState = shipFromState,
                                 ShipFromZipCode = shipFromZip,
                                 ShipFromName = shipFromName,
                                 ShipDate = shipDate
                             };
            entity.packageinfoes.AddObject(insert);
            entity.SaveChanges();

综上所述,我强烈建议从直接数据库开始,然后转向 ORM。使用直接数据库访问来管理三个表并不多,它只会帮助您了解 ORM 提供的功能。此外,您还将在此过程中学到一些宝贵的技能。

于 2013-11-01T18:31:21.617 回答
0

我建议使用 NHibernate 等对象关系映射器 (ORM) 工具。我不知道什么具体支持 MySql。我认为 Telerik OpenAccess,也许是 Entity Framework。这些框架为您做了很多繁重的工作,因此您不必自己编写代码。每个 ORM 都有优点和缺点,在选择一个之前应该彻底研究。

于 2013-11-01T17:58:06.400 回答