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 つの文字列変数で 1 つの結果のみになります。データを取得して保存する方法は?

ありがとうございました

4

2 に答える 2

2

cmd.ExecuteNonQuery(); を使用する代わりに、レコードを反復処理するには DataReader が必要です。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

1つの行を返すクエリから複数の文字列を取得する不正な方法ですが、次のようになります。

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側で両方の文字列を1つに結合し、C#側でそれらを分割することです。このトリックを使用すると、リーダーをループしたり、リーダーを閉じたりすることを回避できます。名前に文字が含まれていないことを前提としています'|'

于 2012-05-16T16:55:21.817 に答える