tp09 Ответов: 2

Мне нужно решение для этой ошибки"system.argumentnullexception: 'value не может быть null. Имя параметра: path'" и может ли любой 1 Поделиться получением файла excel в listview с помощью oledb-соединения


Мне нужно решение для этой ошибки"system.argumentnullexception: 'value не может быть null. Имя параметра: path'" и может ли любой 1 поделиться со мной кодом для получения файла excel в listview с помощью oledb-соединения

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

использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;

пространство имен WpfApp2
{
оплата класса
{



публичная строка ACHTransactionCodeM { get; set; }
public string Control9{ get; set; }


публичная строка DestinationAccountType2 { get; set; }
публичная строка LedgerFolioNumber3 { get; set; }
public string Control15 { get; set; }
публичная строка BeneficiaryAccountHoldersName40 { get; set; }
public string Control7 { get; set; }

}
}

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Shapes;
using Microsoft.Win32;
using WpfApp2;

namespace WpfApp2
{

    public partial class MainWindow : Window
    {
        private string filePath;

        public MainWindow()
        {
            InitializeComponent();

        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            // ofd.DefaultExt = "Image files(*.png; *.jpeg)| *.png; *.jpeg | All files(*.*) | *.* ;";
            ofd.Filter = @"All files (*.*)|*.*"; ;
            ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string connetion = string.Format(@"provider= Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\tharun.reddy\Documents\cms1.xlsx ; Extended Properties= 'Excel 12.0 Xml;HDR=YES;IMEX=1;'");
            
            OleDbConnection conector = new OleDbConnection(connetion);
            conector = new OleDbConnection(connetion);
            conector.Open();

            OleDbCommand consulta = default(OleDbCommand);
            consulta = new OleDbCommand("select * from [cms1$]", conector);

            OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter();
            adapter.SelectCommand = consulta;
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            conector.Close();
            if (ofd.ShowDialog() == true)
            {
                string filename = ofd.FileName;
                textbox.Text = filename;
                //txtEditor.Text = File.ReadAllText(filename);
            }
                List<payment> payments = DataTableReader(textbox.Text);
                //lvPayments.ItemsSource = File.ReadAllText(filename);
                lvPayments.ItemsSource = payments ;

            }

        private List<payment> DataTableReader(string filepath)
        {

            List<payment> lstpayment = new List<payment>();
               

            using (StreamReader sr = File.OpenText(filePath))
                
            {
                string strPay = string.Empty;

                string strACHTransactionCodeM = (new FileInfo(filePath)).Name;

                foreach (var payment in sr.ReadToEnd().Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).AsEnumerable())
                {
                    string[] strCols = payment.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    lstpayment.Add(new payment { ACHTransactionCodeM = strACHTransactionCodeM, Control9 = strCols[1], DestinationAccountType2 = strCols[2] });
                }
            }
              return lstpayment;
            }
    }
}

F-ES Sitecore

Какая строка выдает ошибку?

tp09

string strACHTransactionCodeM = (new FileInfo(filePath)).Name;

CHill60

Похоже, что в текстовом поле ничего нет.

CHill60

Смотрите решение от OriginalGriff и поставьте свою точку останова на линию

List<payment> payments = DataTableReader(textbox.Text);
Как я уже сказал, Похоже на текстовое поле.Текст пуст

tp09

ладно

2 Ответов

Рейтинг:
20

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


Рейтинг:
0

F-ES Sitecore

Как уже говорили другие, если текстовое поле пусто, вы получите эту ошибку. Это текстовое поле будет иметь значение только в том случае, если "ofd.ShowDialog()" имеет значение true, а если оно равно false, то текстовое поле остается пустым. Вероятно, вы захотите прервать весь процесс, если диалоговое окно возвращает false, или обработать файл только в том случае, если он истинен, поэтому что-то вроде приведенного ниже

if (ofd.ShowDialog() == true)
{
    string filename = ofd.FileName;
    textbox.Text = filename;
            
    List<payment> payments = DataTableReader(textbox.Text);
    lvPayments.ItemsSource = payments ;
}