2013-04-02 3 views
1

У меня есть функция, которая получает команду SQL и возвращает набор данных. Теперь я пытаюсь запустить эту команду строки:Преобразование DataSet в String или Int

@"SELECT ProductPrice 
FROM Products 
Where ProductPrice IN 
(
    SELECT ProductPrice 
    FROM Products 
    WHERE ProductName =N'" 

+ listBox1.Text 
+ "')").Tables[0].Rows[0].ToString() 

ProductPrice является INT
ProductName является NVARCHAR

Я получаю этот результат в текстовом поле:

'System.Data .DataRow '

BTW: Это ПРОЕКТ ШКОЛЫ! Я знаю, что это может быть уязвима для SQL Injection

+1

Скажем, если запрос будет возвращать максимум на 1 строку с 1 полем (ProductPrice), Я предлагаю вам использовать 'ExecuteScalar' вместо' DataAdapter.Fill' и т. Д. – shahkalpesh

+0

Что вы ожидали в текстовом поле? Вы выполняете 'ToString()' на объекте DataRow. Конечно, вам нужно будет перебирать фактические поля в строке, чтобы найти их значения. Заметьте, что я пытаюсь дать вам направление, чтобы следовать вместо фактического ответа. – Bazzz

+0

Ну, я использовал ** ToString() ** трюк с другим запросом, и он отлично работает, поэтому я хочу, чтобы он был таким же. – ShmuelCohen

ответ

2

Поскольку этот вопрос является домашним заданием, я собираюсь придерживаться guidelines for homework questions и стараюсь быть полезным, не давая вам полного ответа.

  • Try предоставить объяснение, что приведет к Аскер в правильном направлении. Подлинное понимание - настоящая цель для студентов, но пытается обеспечить, что редко недооценивается по любому вопросу.
  • Обычно лучше не предоставлять полный образец кода, если вы считаете, что это не поможет ученику, используя ваше лучшее суждение. Вы, , можете сначала использовать псевдокод, и в духе создания ресурса программирования вы можете вернуться после подходящего количества времени и отредактировать ответ, чтобы включить более полный код. Таким образом, студент все еще должен написать свой собственный код, но полное решение может стать доступным после окончания задания.

Во-первых, вам не хватает какой-то код в вашем образце, но, основываясь на результатах, я предполагаю, что у вас есть что-то подобное в вашем коде:

TextboxResults.Text = MyTable.Rows[0].ToString(); 

Причина, по которой вы получаете System.Data.DataRow, заключается в том, что вы ссылаетесь только на строку (первая строка в таблице, заполненная вашим адаптером данных), которая представляет собой набор объектов.

Подсказка: в вашем заявлении выбора цена находится в первом элементе внутри (индекс на основе 0) строки, которую вы уже указываете.

Сокращенная версия: вы ссылаетесь на первую строку таблицы. Вы должны ссылаться на содержимое первой ячейки в первой строке таблицы.

Поскольку быть хорошим разработчиком часто означает, зная, как использовать поиск, я бы Google следующую фразу и применить то, что я только что сказал вам, и вы должны иметь свой ответ:

, как получить доступ к определенному клетка DataRow в таблице

Второй намек:

Если бы я собирался записи к содержимому первой ячейки в первой строке это будет выглядеть следующим образом:

myTable.Rows[0][0] = 1.99; 

вместо

myTable.Rows[0] = 1.99; 
+0

ОК, я буду google, мне нужно это для остальной части моего проекта. Спасибо ! – ShmuelCohen

+0

«Второй намек» работает как магия, СПАСИБО !! – ShmuelCohen

1

Шмулик,

Я предполагаю, что вы пытаетесь напечатать с помощью dataRow.ToString(). C# не знает, как печатать объект типа DataRow, так как объект может содержать разные столбцы. Если вы хотите напечатать ProductPrice, попробуйте вместо этого dataRow[0].ToString().

+0

Gena, У меня нет возможности делать, dataRow [0] .ToString(). – ShmuelCohen

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