C #: невозможно получить данные из набора записей - PullRequest
2 голосов
/ 10 мая 2011

Исключением, которое я получаю, является «Нет строки в позиции 0»:

Я поместил заглушку в поле сообщения, чтобы убедиться, что я действительно получаю результат из базы данных.Пробовал разные запросы, и, кажется, работает нормально.Однако, когда я пытаюсь извлечь эту информацию из результирующего набора, я продолжаю получать эту ошибку.Что я делаю неправильно?Вот текущий код, который я загрузил, он возвращает 1 результат.Я пытаюсь взять этот один результат и вернуть его в программу как двойной.Но независимо от того, что я делаю с этим, ошибка, которую я все еще получаю, это "нет строки в позиции 0".Я попробовал позиции 1 и 2, и получил тот же результат.

запрос: «выберите отличную sweetTarget из productInfo где flavour = 'Classic Coke'"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;

    namespace DatasetTest1
    {
        class dataLayer
        {

            static string connectionString = "Data Source=HALEY;Initial Catalog=cokeDatabaseSQL;Integrated Security=True";
            static SqlConnection conn = new SqlConnection(connectionString);
            static string sql = "select distinct sweetTarget from productInfo where flavor = 'Classic Coke'";
            static SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            static cokeDatabaseSQLDataSet dataTable = new cokeDatabaseSQLDataSet();

            public static double getTargetBrix()
            {
                double value = 0.00;
                try
                {

                    conn.Open();
                    int affectedRows = da.Fill(dataTable);

                    if (affectedRows > 0)
                    {
                        MessageBox.Show("Rows Returned: " + affectedRows);
                        value = dataTable.productInfo[0].sweetTarget;
                    }
                    else
                        MessageBox.Show("Empty Set");

                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
                finally
                {
                    conn.Close();
                }



                return value;
            }
        }
    }

Ответы [ 4 ]

1 голос
/ 10 мая 2011

Проблема в том, что ваш DataSet не содержит определения для запроса, который вы пытаетесь выполнить, и данные попадают в другую таблицу.То есть select distinct ... from productInfo не заполняет таблицу данных productInfo внутри cokeDatabaseSQLDataSet.Вам нужно написать что-то вроде этого, чтобы извлечь значение:

value = (double) dataTable.Tables[dataTable.Tables.Count - 1].Rows[0][0];

Теперь, если вместо объявления dataTable как cokeDatabaseSQLDataSet вы сделаете это:

static DataTable dataTable = new DataTable();

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

value = (double) dataTable.Rows[0][0];
1 голос
/ 10 мая 2011

da.Fill(dataTable) используется для добавления строк в DataSet. Итак, учитывая, что dataTable является DataSet, попробуйте это:

value = dataTable.Tables[0].Rows[0][0]

OR

value = dataTable.Tables[0].Rows[0][ColumnName]
0 голосов
/ 10 мая 2011

Проверка количества таблиц и количества строк

dataTable.Tables.Count

dataTable.Tables[0].Rows.Count
0 голосов
/ 10 мая 2011

ик!неправильный код

Вы должны прочитать таблицу из набора данных.

Пример:

foreach (DataRow dRow in affectedRows.Tables[0].Rows)
{
    var retval   = dRow["Keyword"].ToString();
    MessageBox.Show(retval );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...