2012-05-16 2 views
1

Я хочу сделать некоторый запрос к mysql из C#, чтобы я мог вернуться, например, к имени и фамилии.Как читать определенные данные из результатов mysql в C#

Я не знаю, как справиться с этим в 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 строковых переменных. Как получить данные и сохранить их?

Спасибо

ответ

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#. Этот трюк позволяет вам избежать обхода считывателя, его закрытия и т. Д. Предполагается, что имена не содержат '|' символов.

+0

привет, я пробовал свой код, и я получаю эту ошибку: «Ссылка на объект не установлена ​​в экземпляр объекта.» В этой строке: «var tokens = ((String) cmd.ExecuteScalar()). Split ('|'); ' –

+0

@denonth Проверьте тип' customer' (я намекнул об этом в комментарии). Я серьезно сомневаюсь, что это тип 'float', поэтому' MySqlDbType.Float', вероятно, должен быть чем-то другим. – dasblinkenlight

+0

его varchar вы думаете, что это проблема? –

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(); 
    } 
Смежные вопросы