Получение значений из OleDbDataReader

Я хотел бы знать, можно ли получить определенное значение из OleDbdataReader.

Например, я импортирую данные из листа Excel, который имеет 100 строк и 10 столбцов. Затем я хочу, чтобы читатель получал значения из всех столбцов в указанной строке. Скажем, у меня есть текстовое поле, я помещаю в него случайное число (85), читатель находит это число в первом столбце и соответственно читает все значения столбца.

И да, если это возможно, не могли бы вы подсказать, как это сделать.

Пока мне удалось только заставить читателя прочитать все значения.

Основная идея заключается в том, что, изменив значение в текстовом поле, читатель применит другой набор значений к методу. Ссылка на картинку из листа excel, чтобы было понятнее:

https://imagizer.imageshack.us/v2/505x318q90/743/YIVGVf.jpg

    private void button1_Click(object sender, EventArgs e)
    {
        Model ThisModel = new Model();
        Beam ThisBeam = new Beam();

        OleDbConnection conn = new OleDbConnection();
        const string excelConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=@1;";
        const string connStringExtras = @"Extended Properties=""Excel 8.0;HDR=Yes;Imex=1""";
        conn.ConnectionString = excelConnString.Replace("@1", "C:\\Users\\Andrejs\\Desktop\\API2.xls;") + connStringExtras;

        try
        {
            conn.Open();
            OleDbCommand cmd = new OleDbCommand("SELECT A, B, C, D, E, F "+
                "FROM [SHEET1$]", conn);
            OleDbDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                double X = (double)reader.GetValue(1);
                double Y = (double)reader.GetValue(2);
                CreatePadFooting(X, Y);
            }
        }
            catch
            {
            }

        ThisModel.CommitChanges();
    }
    private static void CreatePadFooting(double X, double Y)
    {
        Beam PadFooting1 = new Beam();

        PadFooting1.Name = "FOOTING";
        PadFooting1.Profile.ProfileString = "200*200";
        PadFooting1.Material.MaterialString = "K30-2";
        PadFooting1.Class = "8";
        PadFooting1.StartPoint.X = X;
        PadFooting1.StartPoint.Y = Y;
        PadFooting1.StartPoint.Z = 0.0;
        PadFooting1.EndPoint.X = X;
        PadFooting1.EndPoint.Y = Y;
        PadFooting1.EndPoint.Z = -500.0;
        PadFooting1.Position.Rotation = Position.RotationEnum.FRONT;
        PadFooting1.Position.Plane = Position.PlaneEnum.MIDDLE;
        PadFooting1.Position.Depth = Position.DepthEnum.MIDDLE;

        PadFooting1.Insert();
    }
    }
}

person N.Pelss    schedule 21.08.2014    source источник
comment
Это возможно сделать, да.   -  person Tyler    schedule 21.08.2014
comment
Как говорит Тайлер, это действительно возможно. Можете ли вы немного яснее рассказать о том, что вы хотите сделать, а также о том, что вы пробовали до сих пор.   -  person Ben Robinson    schedule 21.08.2014
comment
Вероятно, вам нужно ГДЕ в вашем запросе SELECT. Не могли бы вы показать полный код, который выбирает строки из вашего файла Excel?   -  person Steve    schedule 21.08.2014
comment
Я прикрепил полный код и ссылку на изображение, чтобы уточнить, что я собираюсь делать.   -  person N.Pelss    schedule 21.08.2014


Ответы (1)


Вам нужен оператор If, чтобы сравнить значение первого столбца, а затем прочитать его из Reader. Вставьте оператор If следующим образом:

double randomValue = Convert.ToDouble(txtBoxRandomValue.Text); //get value to match and convert to double

try
    {
        conn.Open();
        OleDbCommand cmd = new OleDbCommand("SELECT A, B, C, D, E, F "+
            "FROM [SHEET1$]", conn);
        OleDbDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {

        if (randomValue == Convert.ToDouble(reader.GetValue(0))) //checking here the first column
         {
            double X = (double)reader.GetValue(1);
            double Y = (double)reader.GetValue(2);
            CreatePadFooting(X, Y);
         }
       }
    }
        catch
        {
        }
person Syed Ali Taqi    schedule 21.08.2014