gpt4 book ai didi

c# - 在 C# 中创建数据对象来保存表中的值

转载 作者:行者123 更新时间:2023-11-29 13:29:05 25 4
gpt4 key购买 nike

请先阅读编辑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:!!!我回头看了看,发现我有一些错别字,抱歉进行了额外的编辑。现在一切都很好。感谢大家的帮助。

最佳答案

您实际上有两个选择,直接数据库访问或正如 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 提供的功能。此外,您还将在此过程中学到一些宝贵的技能。

关于c# - 在 C# 中创建数据对象来保存表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19732457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com