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