C#:无法从记录集中检索数据

本文关键字:集中 检索 数据 记录 | 更新日期: 2023-09-27 17:55:37

im 得到的异常是"位置 0 处没有行":

把消息框存根放在那里,以验证我是否真的从数据库中获得了结果。尝试了不同的查询,它似乎工作正常。但是,当我尝试从结果集中检索该信息时,我不断收到该错误。我做错了什么?这是我加载的当前代码,它返回 1 个结果。我正在尝试获取一个结果并将其作为双精度返回给程序。但是无论我用它做什么,im仍然得到的错误是"位置 0 处没有行"。我尝试了位置 1 和 2,结果相同。

查询是:"从产品信息中选择不同的甜味目标,其中风味='经典可乐'"

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;
            }
        }
    }

C#:无法从记录集中检索数据

问题是您的 DataSet 不包含您尝试执行的查询的定义,并且数据最终位于不同的表中。也就是说,select distinct ... from productInfo不会填充cokeDatabaseSQLDataSet内的productInfo数据表。您需要编写这样的东西来提取值:

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

现在,如果不是将 dataTable 声明为 cokeDatabaseSQLDataSet,而是执行以下操作:

static DataTable dataTable = new DataTable();

然后,您将能够通过以下行获得所需的值:

value = (double) dataTable.Rows[0][0];
da.Fill(dataTable)用于

向数据集添加行。因此,考虑到 dataTable 是一个 DataSet,请尝试以下操作:

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

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

检查表计数和行计数

dataTable.Tables.Count
dataTable.Tables[0].Rows.Count

hic ! 错误的代码

必须从数据集读取表。

例:

foreach (DataRow dRow in affectedRows.Tables[0].Rows)
{
    var retval   = dRow["Keyword"].ToString();
    MessageBox.Show(retval );
}