2016-06-13 2 views
-2

Я пытаюсь получить значения из нескольких строк. Как и в php, вы делаете с odbc_fetch_row и obdc_result. Это потому, что я хочу распечатать квитанцию ​​со значениями из двух таблиц, но я не знаю, что мне делать. Вот запрос:Попытка получить результаты запроса в C#

string query="SELECT * FROM faturas_online_detalhe WHERE cod_fatura='"+codfatura+"';"; 

Редактировать, добавил код, который я уже имел до сих пор:

 connection.Open(); 
     OleDbCommand comando2 = new OleDbCommand(); 
     comando2.Connection = connection; 
     comando2.CommandText = "SELECT * FROM detalhe_faturas_online WHERE cod_fatura = '" + codfatura + "'; "; 
     OleDbDataReader reader = comando2.ExecuteReader(); 
     string outValues = string.Empty; 
     while (reader.Read()) 
     { 
      outValues += string.Format("Column 1 = {0}, Column 2 = {1}, etc...", reader.GetString(0), reader.GetString(1)); 
     } 
     Console.WriteLine(outValues); 
     lst1.Items.Add(outValues); 
     connection.Close(); 
     connection.Close(); 

Edit здесь является образ того, как база данных выглядит как: a busy cat

+1

Пожалуйста, включите любой другой связанный код, чтобы мы могли хотя бы увидеть, насколько далеко вы находитесь. Вы должны использовать объект соединения, объект команды и т. Д. Что-то вроде 'SqlConnection' и' SqlCommand' или производной. Вы также должны использовать параметризованные запросы вместо конкатенации строк. – gmiley

+0

Большинство импортных вещей - это сначала установить соединение с вашим источником данных. Если вы используете какую-то структуру ORM или прямое соединение с БД, процесс будет немного другим – DaniDev

+0

отредактирован так плохо показать вам код –

ответ

1

Вы хотите скорее всего использовать ExecuteReader вместо ExecuteScalar. Вы будете использовать читатель для доступа к табличным данным, возвращаемым вашим запросом. Я бы также предложил использовать параметризованные запросы вместо конкатенации строк:

connection.Open(); 
    OleDbCommand comando = new OleDbCommand(); 
    comando.Connection = connection; 
    comando.CommandText = "SELECT * FROM faturas_online_detalhe WHERE cod_fatura= @parm1;"; 
    comando.Parameters.AddWithValue("@parm1", codfatura); 
    OleDbReader reader = comando.ExecuteReader() ; 
    string outValues = string.Empty; 
    while(reader.Read()) 
    { 
     outValues += string.Format("Column 1 = {0}, Column 2 = {1}, etc...", reader.GetString(0), reader.GetString(1)); 
    } 
    Console.WriteLine(outValues); 
    txtOutput.Text = outValues; 
    reader.Close(); 
    connection.Close(); 
+0

Большое вам спасибо! Я работаю над вашим кодом, чтобы он работал в моей программе, большое спасибо! +1 –

+0

Но я только что узнал, он не работает, когда в деталях получения более одной записи. –

+0

Как вы это понимаете? Этот код будет проходить через каждую запись, возвращаемую из запроса, и распечатывать содержимое. – gmiley

0

SqlCommand.ExecuteScalar()

Выполняет запрос, и возвращает первый столбец первой строки в результирующем наборе, возвращаемом запросом. Дополнительные столбцы или строки игнорируются.

Возможно, вы захотите что-то вроде ExecuteQuery() или ExecuteReader(). Обратите внимание, что это было найдено просто Googling «ExecuteScalar» - это был первый результат. Не бойтесь Google свой код!

+0

Спасибо, я буду! я искал предмет как заголовок, а не сам код, но я все еще не могу понять, как получить значения из запроса, я могу сделать это с 1 столбцом, а не с несколькими –

Смежные вопросы