如何从 mysql 中读取一行?
How to read one row from mysql?
我在 mysql 中有用户配置文件,我想读取一行(某些用户的)并将值添加到对象 "user"
这是我的部分代码:( return 用户的函数)
connection.Open();
person person_1 = new person();
//1. Read name
string sql = "select name from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", name);
cmd.Parameters.Add("@surname", surname);
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read()) {
person_1.name = reader["name"].ToString();
//2. Read surname
string sql = "select surname from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", name);
cmd.Parameters.Add("@surname", surname);
person_1.surname = reader["surname"].ToString();
return person_1;
有了这个我只得到名字,姓氏是空的(在调试器中看到)
你的代码毫无意义。您已经知道姓氏和姓名,因为您将它们作为 WHERE 条件的参数传递。其中一部分,姓氏为空的问题是您不执行第二个命令。
您应该添加
//2. Read surname
string sql = "select surname from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", MySqlType.VarChar).Value = name;
cmd.Parameters.Add("@surname", MySqlType.VarChar).Value = surname;
reader = cmd.ExecuteReader();
person_1.surname = reader["surname"].ToString();
也就是说,执行两次命令来检索一行是没有意义的。您的查询文本可以轻松添加您想要检索的所有列名,并且只执行一次读取
//1. Read the row matching the known surname and name
string sql = @"select name, surname, column1, column2, colx
from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", MySqlType.VarChar).Value = name;
cmd.Parameters.Add("@surname", MySqlType.VarChar).Value = surname;
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read()) {
person_1.name = reader["name"].ToString();
person_1.surname = reader["surname"].ToString();
person_1.Property1 = reader["column1"].ToString();
...and so on for other columns
我在 mysql 中有用户配置文件,我想读取一行(某些用户的)并将值添加到对象 "user"
这是我的部分代码:( return 用户的函数)
connection.Open();
person person_1 = new person();
//1. Read name
string sql = "select name from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", name);
cmd.Parameters.Add("@surname", surname);
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read()) {
person_1.name = reader["name"].ToString();
//2. Read surname
string sql = "select surname from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", name);
cmd.Parameters.Add("@surname", surname);
person_1.surname = reader["surname"].ToString();
return person_1;
有了这个我只得到名字,姓氏是空的(在调试器中看到)
你的代码毫无意义。您已经知道姓氏和姓名,因为您将它们作为 WHERE 条件的参数传递。其中一部分,姓氏为空的问题是您不执行第二个命令。
您应该添加
//2. Read surname
string sql = "select surname from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", MySqlType.VarChar).Value = name;
cmd.Parameters.Add("@surname", MySqlType.VarChar).Value = surname;
reader = cmd.ExecuteReader();
person_1.surname = reader["surname"].ToString();
也就是说,执行两次命令来检索一行是没有意义的。您的查询文本可以轻松添加您想要检索的所有列名,并且只执行一次读取
//1. Read the row matching the known surname and name
string sql = @"select name, surname, column1, column2, colx
from profili where name=@name and surname=@surname";
cmd = new MySqlCommand(sql, konekcija);
cmd.Parameters.Add("@name", MySqlType.VarChar).Value = name;
cmd.Parameters.Add("@surname", MySqlType.VarChar).Value = surname;
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read()) {
person_1.name = reader["name"].ToString();
person_1.surname = reader["surname"].ToString();
person_1.Property1 = reader["column1"].ToString();
...and so on for other columns