Как я могу написать в DataTable? - PullRequest
0 голосов
/ 07 июня 2019

Мне нужна свежая пара глаз здесь. Я пытаюсь извлечь детали из загруженного пользователем файла, добавить их в DataTable, а затем записать их в мою таблицу SQL Server.

Кажется, все работает хорошо, но для фактических полей, добавляемых в DataTable (довольно важно!). Код выполняется до конца, но с пустой таблицей DataTable, поэтому, очевидно, ничего не записывается в мою таблицу. Я прикрепляю свой контроллер - я уверен, что это что-то очевидное, что мне не хватает, но я не могу определить, почему.

public class FileUploaderController : Controller
{

    public FileUploaderController()
    {
        db = new DatabaseContext();

    }

    public FileUploaderController(DatabaseContext context)
    {
        db = context;
    }

    private DatabaseContext db { get; }

    public ActionResult UploadFilesPartial()
    {
        return View();
    }


    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase file)
    {

        var dt = CreateDataTable();

        if (file != null)
        {
            var fileName = file.FileName;
            var filePath = Path.GetFullPath(fileName);
            var fileType = Path.GetExtension(fileName);

            DataRow fileDetails = dt.NewRow();
            fileDetails["FileName"] = fileName;
            fileDetails["FilePath"] = filePath;
            fileDetails["FileType"] = fileType;

            UploadToDataBase(db, dt);
        }


        return RedirectToAction("NettingBatch", "Views");

    }


    private DataTable CreateDataTable()
    {

        System.Data.DataTable table = new DataTable("FileUploads");

        DataColumn id;
        id = new DataColumn
        {
            DataType = System.Type.GetType("System.Int32"),
            ColumnName = "Id",
            ReadOnly = true,
            Unique = true
        };
        table.Columns.Add(id);

        DataColumn name;
        name = new DataColumn
        {
            DataType = System.Type.GetType("System.String"),
            ColumnName = "FileName",
            AutoIncrement = false,
            Caption = "FileName",
            ReadOnly = false,
            Unique = false
        };
        table.Columns.Add(name);

        DataColumn path;
        path = new DataColumn
        {
            DataType = System.Type.GetType("System.String"),
            ColumnName = "FilePath",
            AutoIncrement = false,
            Caption = "FilePath",
            ReadOnly = false,
            Unique = false
        };
        table.Columns.Add(path);

        DataColumn type;
        type = new DataColumn
        {
            DataType = System.Type.GetType("System.String"),
            ColumnName = "FileType",
            AutoIncrement = false,
            Caption = "FileType",
            ReadOnly = false,
            Unique = false
        };
        table.Columns.Add(type);

        DataColumn[] PrimaryKeyColumns = new DataColumn[1];
        PrimaryKeyColumns[0] = table.Columns["Id"];
        table.PrimaryKey = PrimaryKeyColumns;

        return table;

    }




    private void UploadToDataBase(DbContext context, DataTable data)
    {
        try
        {
            var columnMappings = new List<Tuple<string, string>>
            {
                new Tuple<string, string>("Id", "Id"),
                new Tuple<string, string>("FileName", "FileName"),
                new Tuple<string, string>("FilePath", "FilePath"),
                new Tuple<string, string>("FileType", "FileType"),

            };

            PopulateHistoryTable.BulkCopyDataTableIntoDatabase(context, data, "[mdp].[FileUploads]",
                columnMappings);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.InnerException);
        }



    }


}

Я ожидаю, что детали моего тестового файла, который я загружаю в свое представление, будут извлечены и записаны обратно в таблицу FileUploads. Фактические результаты не указаны.

1 Ответ

1 голос
/ 07 июня 2019

NewRow возвращает строку, соответствующую вашей схеме DataTable, но на самом деле она не «добавляет» ее в DataTable.Для этого используйте функцию «Добавить» из коллекции строк:

DataRow fileDetails = dt.NewRow();
fileDetails["FileName"] = fileName;
fileDetails["FilePath"] = filePath;
fileDetails["FileType"] = fileType;
dt.Rows.Add(fileDetails);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...