C # - подключение к базе данных и вставка данных с помощью хранимой процедуры SQL Server - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь научить себя некоторому C # (используется для программирования на C ++ в конце 90-х, если это вам что-то говорит).Так или иначе, я продолжаю сталкиваться с ошибкой тестирования в Visual Studio 2017 при попытке протестировать один из моих классов.

Настройка выглядит следующим образом:

enter image description here

И в моем файле ErrorLog.cs:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
using System.Configuration;

namespace ManagementLibrary {
    public class ErrorLog {
        private int log_id { get; set; }
        private string logException {get; set;}
        private string error { get; set; }
        private string date_time { get; set; }
        private string logObject { get; set; }

        public ErrorLog(string logException, string error, string date_time, string logObject) {
            this.logException = logException;
            this.error = error;
            this.date_time = date_time;
            this.logObject = logObject;
        }

        public int LogError() {
            using (SqlConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("DataConnection"))) {

                SqlCommand command = new SqlCommand("InsertErrorLog", connection);
                command.CommandType = CommandType.StoredProcedure;

                SqlParameter p1 = new SqlParameter();
                p1.ParameterName = "@Exception";
                p1.SqlDbType = SqlDbType.VarChar;
                p1.Direction = ParameterDirection.Input;
                p1.Value = this.logException;

                SqlParameter p2 = new SqlParameter();
                p2.ParameterName = "@Error";
                p2.SqlDbType = SqlDbType.VarChar;
                p2.Direction = ParameterDirection.Input;
                p2.Value = this.error;

                SqlParameter p3 = new SqlParameter();
                p3.ParameterName = "@DateTime";
                p3.SqlDbType = SqlDbType.VarChar;
                p3.Direction = ParameterDirection.Input;
                p3.Value = this.date_time;

                SqlParameter p4 = new SqlParameter();
                p4.ParameterName = "@logObject";
                p4.SqlDbType = SqlDbType.VarChar;
                p4.Direction = ParameterDirection.Input;
                p4.Value = this.logObject;

                command.Parameters.Add(p1);
                command.Parameters.Add(p2);
                command.Parameters.Add(p3);
                command.Parameters.Add(p4);

                connection.Open();
                var identity = command.ExecuteNonQuery();
                return identity;
            }

        }

    }
}

По сути, я пытаюсь создать контрольный журнал, чтобы при возникновении ошибки он просто добавляет запись в базу данных.Так что я не только пытаюсь научить себя немного C #, но я пытаюсь научиться выполнять модульное тестирование в Visual Studio.Я следовал некоторым учебникам по настройке и выполнению модульных тестов, но когда я продолжаю, я получаю следующий сбой:

Сообщение: метод тестирования ManagementLibrary.Tests.ErrorLogTests.LogErrorTest вывел исключение:System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

И когда я "отлаживаю" ошибку, она "переходит" в мой файл Helper.cs.Теперь этот класс просто читает файл App.config и возвращает строку подключения.

namespace ManagementLibrary {
    public static class Helper {
        public static string CnnVal(string name) {
            return ConfigurationManager.ConnectionStrings[name].ConnectionString;
        }
    }
}

И показывает ошибку: «Ссылка на объект не установлена ​​на экземпляр объекта».

Iдаже не знаю, что это значит.

Мысли?

1 Ответ

0 голосов
/ 02 октября 2018

Когда вы используете ConfigurationManager, он читает app.config для записи сборки / проекта.Так что в этом случае, когда вы запускаете модульные тесты, запись - это ваш тестовый проект, у которого нет app.config.Из-за этого вы будете сталкиваться с ошибками всякий раз, когда вы пытаетесь использовать ConfigurationManager.

...