У меня есть веб-страница, которая генерирует отчет об инциденте в базе данных. Отчет об инциденте привязан к таблице автомобилей с использованием идентификатора автомобиля.

Когда я нажимаю кнопку отправки, я получаю сообщение об ошибке в DAL, которое гласит: «Дополнительная информация: невозможно вставить значение NULL в столбец« CarID », таблица« RideXpress.dbo.IncidentReport »; столбец не допускает нулей. INSERT не работает».

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

<asp:DropDownList ID="DD1" runat="server" CssClass="form-control" AutoPostBack="true" ></asp:DropDownList>

Соответствующий код файла следует

string connectionString = ConfigurationManager.ConnectionStrings["RideXpressConnectionString"].ToString();
            ReportBLL ReportBL = new ReportBLL(connectionString);
            ReportViewModel report = new ReportViewModel();
            int ID = DD1.SelectedIndex;
            report.CarID = ID;
            report.DateOfIncident = Convert.ToDateTime(Date.Text);
            report.ReportName = Name.Text;
            report.ReportDescription = Description.Text;
            report.DateOfReport = DateTime.Today;
            ReportBL.AddReport(report);
            Response.Redirect("~/Reports.aspx");

И DAL, где возникает ошибка, следует

public int AddReport(ReportViewModel add)
    {
        string sqlQuery = "INSERT INTO IncidentReport(DateOfIncident, ReportName, ReportDescription, DateOfReport)" +
            "Values (@DateOfIncident, @ReportName, @ReportDescription, @DateOfReport)";
        using (SqlConnection con = new SqlConnection(_connectionString))
        using (SqlCommand cmd = new SqlCommand (sqlQuery, con))
        {
            con.Open();
            cmd.Parameters.Add("@ReportID", SqlDbType.Int).Value = add.ReportID;
            cmd.Parameters.Add("@CarID", SqlDbType.Int).Value = add.CarID;
            cmd.Parameters.Add("@DateOfIncident", SqlDbType.DateTime).Value = add.DateOfIncident;
            cmd.Parameters.Add("@ReportName", SqlDbType.VarChar).Value = add.ReportName;
            cmd.Parameters.Add("@ReportDescription", SqlDbType.VarChar).Value = add.ReportDescription;
            cmd.Parameters.Add("@DateOfReport", SqlDbType.DateTime).Value = add.DateOfReport;
            return cmd.ExecuteNonQuery();
        }
    }

Любая помощь будет очень высоко ценится.

0
David Horne 7 Июл 2016 в 21:10
1
Ваш ReportId равен NULL. Вы не инициализировали его и не присвоили ему значение. Во-вторых, ваш оператор вставки не включает его и не включает CarID. Является ли ReportID столбцом идентификации?
 – 
Kami
7 Июл 2016 в 21:16

1 ответ

Лучший ответ

Измените запрос на

string sqlQuery = "INSERT INTO IncidentReport(CarID,DateOfIncident, ReportName, ReportDescription, DateOfReport)" +
        "Values (@CarID,@DateOfIncident, @ReportName, @ReportDescription, @DateOfReport)";

Также ReportId отсутствует в запросе, поэтому он не будет установлен, либо добавьте его в запрос, как я сделал выше carID, либо, если это автоматическое приращение идентификатора, не устанавливайте его вообще.

0
Paul Swetz 7 Июл 2016 в 21:21
Большое спасибо! Я бился головой о стену 45 минут только из-за этой крошечной ошибки. reportID - это автоматическое увеличение идентификатора
 – 
David Horne
7 Июл 2016 в 21:28
Тупой вопрос, а как мне это сделать? (Извините за то, что был таким нубом)
 – 
David Horne
7 Июл 2016 в 21:34
Np, под стрелками вверх / вниз для ответа, если вы наведете курсор прямо под ним, должна появиться галочка, щелкните по ней.
 – 
Paul Swetz
7 Июл 2016 в 21:34