im得到的异常是“0位置没有行”:
我把MessageBox存根放在那里,以验证IM是否真的从数据库中得到了结果。尝试了不同的查询,看起来运行良好。但是,当我试图从结果集中检索该信息时,我仍然会得到该错误。我做错什么了?这是我加载的当前代码,它返回1个结果。我试着把这一个结果作为双倍返回给程序。但是不管我用它做什么,我得到的错误仍然是“0位置没有行”。我试过位置1和2,结果一样。
查询是:“从productinfo中选择distinct sweettarget,其中flavor='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;
            }
        }
    }

最佳答案

问题是,数据集不包含您试图执行的查询的定义,并且数据最终位于不同的表上。也就是说,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];

10-02 00:19
查看更多