vinodh muthusamy Ответов: 2

Невозможно получить значение набора данных


Я пытаюсь прочитать данные из файла. xlsx с помощью OLEDB. Но я не мог получить значение из набора данных. Иам получать значение как система".Данных.Объекта datarow" . Но мне нужно получить значение для каждой строки. Я дал свою кодировку ниже.

private void ImportExcel(string strFilePath)
      {
          if (!File.Exists(strFilePath)) ;
          String strExcelConn = "Provider=Microsoft.ACE.OLEDB.12.0;"
      + "Data Source=" + strFilePath + ";"
      + "Extended Properties='Excel 8.0;HDR=Yes'";
          OleDbConnection connExcel = new OleDbConnection(strExcelConn);
          OleDbCommand cmdExcel = new OleDbCommand();
          try
          {
              cmdExcel.Connection = connExcel;
              //Check if the Sheet Exists
              connExcel.Open();
              DataTable dtExcelSchema;
              //Get the Schema of the WorkBook
              dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
              connExcel.Close();
              //Read Data from Sheet1
              connExcel.Open();
              OleDbDataAdapter da = new OleDbDataAdapter();
              DataSet ds = new DataSet();
              string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
              cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
              da.SelectCommand = cmdExcel;
              da.Fill(ds);
              for (int i = 0; i <= ds.Tables[0].Rows.Count; i++)
              {
                  string name = ds.Tables[0].Rows[i].ToString();
              }
              connExcel.Close();

          }
          catch (Exception ex)
          {
              MessageBox.Show(ex.Message, "ImportExcel");
          }
          finally
          {
              cmdExcel.Dispose();
              connExcel.Dispose();
          }
      }


Что я уже пробовал:

private void ImportExcel(string strFilePath)
      {
          if (!File.Exists(strFilePath)) ;
          String strExcelConn = "Provider=Microsoft.ACE.OLEDB.12.0;"
      + "Data Source=" + strFilePath + ";"
      + "Extended Properties='Excel 8.0;HDR=Yes'";
          OleDbConnection connExcel = new OleDbConnection(strExcelConn);
          OleDbCommand cmdExcel = new OleDbCommand();
          try
          {
              cmdExcel.Connection = connExcel;
              //Check if the Sheet Exists
              connExcel.Open();
              DataTable dtExcelSchema;
              //Get the Schema of the WorkBook
              dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
              connExcel.Close();
              //Read Data from Sheet1
              connExcel.Open();
              OleDbDataAdapter da = new OleDbDataAdapter();
              DataSet ds = new DataSet();
              string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
              cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
              da.SelectCommand = cmdExcel;
              da.Fill(ds);
              for (int i = 0; i <= ds.Tables[0].Rows.Count; i++)
              {
                  string name = ds.Tables[0].Rows[i].ToString();
              }
              connExcel.Close();

          }
          catch (Exception ex)
          {
              MessageBox.Show(ex.Message, "ImportExcel");
          }
          finally
          {
              cmdExcel.Dispose();
              connExcel.Dispose();
          }
      }

The Praveen Singh

какую ошибку вы получили ??

2 Ответов

Рейтинг:
2

Karthik_Mahalingam

Обеспечить Column Index

int columnIndex =1; // the column index of the table which you want to read
string name = ds.Tables[0].Rows[i][columnIndex].ToString();

Или, используя Column Name

string columnName = "Column1"; // name of the column in the DataTable
string name = ds.Tables[0].Rows[i][columnName].ToString();


vinodh muthusamy

Спасибо за ваш ценный ответ, но мне нужно получить значение для каждой строки, а не для каждого столбца. Пожалуйста, решите этот вопрос.

Karthik_Mahalingam

гребите только мудро. просто сделай петлю.

vinodh muthusamy

Картик,

Я зациклился, но получаю значения по столбцам. Вот мой код.

int columnindex = 0;

для (тип int я = 0; Я &л;= ДС.Таблицы[0].Строк.Граф; i++)
{
строка имя = ДС.Таблицы[0].Строки[Я][значение columnindex].Метод toString();

}

Karthik_Mahalingam

босс, вы получите имя в каждом ряду. вот как мы делаем петлю,

Рейтинг:
2

ZurdoDev

Это происходит потому, что вы получаете доступ только к строке: ds.Tables[0].Rows[i].Метод toString();

Вы хотите получить доступ к столбцу внутри строки. Вот один из способов:

ds.Tables[0].Rows[i][columnNameorIndex].ToString();


Karthik_Mahalingam

мы отправили сообщение в одно и то же время :)

vinodh muthusamy

Спасибо за ваш ценный ответ, но мне нужно получить значение для каждой строки, а не для каждого столбца. Пожалуйста, решите этот вопрос.

ZurdoDev

Вы должны уметь читать код и видеть, что он делает. Он явно обращается к коллекции строк с индексом i. Так что это должно быть очень легко для вас.