1

我想从 C# 对 mysql 进行某些查询,以便我可以返回例如姓名和姓氏。

我不知道如何在 c# 中处理这个问题,我想尽量减少 sqlinjection。

这是我的代码:

con = new MySqlConnection("server=localhost;database=Customers;uid=root;pwd=******");
con.Open();
cmd = new MySqlCommand("SELECT name,lastname FROM customer WHERE ID_customer= ?Parname;", con);
cmd.Parameters.Add("?Parname", MySqlDbType.Float).Value = customer_card;
cmd.ExecuteNonQuery();
con.Close();

例如,我希望能够读取结果,并且它只是一个结果,在 2 个字符串变量中。如何获取数据并保存?

谢谢

4

2 回答 2

2

您需要一个 DataReader 来遍历记录,而不是使用 cmd.ExecuteNonQuery(); 使用 cmd.ExecuteReader();

try 
  { 
    MySqlDataReader myReader = cmd.ExecuteReader(); 

    // Always call Read before accessing data. 
    while (myReader.Read())  
    { 
      //This will get the value of the column "name"
      Console.WriteLine(myReader.GetString(myReader.GetOrdinal("name"))); 
    } 

    // always call Close when done reading. 
    myReader.Close(); 

    // Close the connection when done with it. 
    } 
  finally 
  { 
    con.Close(); 
  } 
于 2012-05-16T16:50:22.483 回答
0

从返回一行的查询中获取多个字符串的一种欺骗但快速的方法如下:

con = new MySqlConnection("server=localhost;database=Customers;uid=root;pwd=******");
try {
    con.Open();
    cmd = new MySqlCommand("SELECT concat(name,'|',lastname) FROM customer WHERE ID_customer= ?Parname;", con);
    cmd.Parameters.Add("?Parname", MySqlDbType.Float).Value = customer_card; // Are you sure that the ID is float? That's the first time I see anything like that!
    var tokens = ((String)cmd.ExecuteScalar()).Split('|');
    var firstName = tokens[0];
    var lastName = tokens[1];
    Console.Writeln("First={0}, Last={1}", firstName, lastName);
} finally {
    con.Close();
}

这个想法是在 MySql 端将两个字符串组合成一个,然后在 C# 端将它们拆分回来。这个技巧可以让你避免循环通过阅读器,关闭它等等。它假定名称不包含'|'字符。

于 2012-05-16T16:55:21.817 回答