Мой метод insert возвращает нулевое значение в одном из столбцов
Мой метод insert возвращает нулевое значение в одном из столбцов. В одном из столбцов значение извлекается из таблицы. Когда я выполнил его в SQL Server, он работал отлично. Когда я использовал хранимую процедуру для вставки этой строки в Visual Studio. Значение столбца-это первичный ключ в другой таблице, основанный на том, что выбрал пользователь.
Что я уже пробовал:
Создана хранимая процедура, она отлично выполняется в SQL Server. Мое веб-приложение - это 3-уровневое приложение с уровнем доступа к данным, уровнем бизнес-логики и уровнем представления. Код, который я написал, заполняет только 4 из 5 столбцов таблицы, исключение составляет один столбец, который возвращает нулевое значение
This is my code in the Presentation Layer using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; using System.Data.Sql; using System.Configuration; using BLL; using DAL; using System.Drawing; namespace XcellIT { public partial class WebForm1 : System.Web.UI.Page { private BusinessLogicLayer bll = new BusinessLogicLayer(); protected void Page_Load(object sender, EventArgs e) { if (IsPostBack != true) { // FillAthlete ddlAthleteName.DataSource = bll.FillAthlete(); ddlAthleteName.DataTextField = "Name"; ddlAthleteName.DataValueField = "UserID"; ddlAthleteName.DataBind(); ddlAthleteName.Items.Insert(0, new ListItem("SELECT", "NA")); //FillDiscipline ddlDisciplineName.DataSource = bll.FillDiscipline(); ddlDisciplineName.DataTextField = "Name"; ddlDisciplineName.DataValueField = "DisciplineID"; ddlDisciplineName.DataBind(); ddlDisciplineName.Items.Insert(0, new ListItem("SELECT", "NA")); // FillMeeting ddlMeeting.DataSource = bll.FillMeeting(); ddlMeeting.DataTextField = "MeetingName"; ddlMeeting.DataValueField = "MeetingName"; ddlMeeting.DataBind(); ddlMeeting.Items.Insert(0, new ListItem("SELECT", "NA")); lblResult.Visible = false; lblResult.Text = ""; } } protected void Add_Click(object sender, EventArgs e) { try { ATHLETE_STATISTICS ar = new ATHLETE_STATISTICS(); ar.AthleteID = Convert.ToInt32(ddlAthleteName.SelectedValue); ar.DisciplineID = Convert.ToInt32(ddlDisciplineName.SelectedValue); ar.MeetingID = Convert.ToInt32(ddlMeeting.SelectedIndex); ar.Result = Convert.ToDouble(txtResult.Text); ar.Placement = Convert.ToInt32(ddlPlaced.SelectedIndex); BusinessLogicLayer bl = new BusinessLogicLayer(); try { if (bl.AddAthleteStatsnew(ar) == true) { lblResult.Text = "Added"; Response.Redirect("Home.aspx"); } else { lblResult.Text = "Error occured. Not successfully added"; } } catch(Exception exc) { lblResult.Visible = true; lblResult.Text = lblResult.Text + exc.ToString(); } } catch(SqlException exc) { lblResult.Visible = true; lblResult.Text = lblResult.Text + exc.ToString(); } catch (Exception exc) { lblResult.Visible = true; lblResult.Text = lblResult.Text + exc.ToString(); } } } } Business Logic Layer public bool AddAthleteStatsnew(ATHLETE_STATISTICS ar) { return db.AddAthleteStatisticsNew(ar); } Data Access Layer public bool AddAthleteStatisticsNew(ATHLETE_STATISTICS amr) { SqlParameter[] pars = new SqlParameter[] { new SqlParameter("@AthleteID" , amr.AthleteID), //new SqlParameter("@MeetingDisciplineID" , amr.MeetingDisciplineID), new SqlParameter("@MeetingID" ,amr.MeetingID), new SqlParameter("@DisciplineID",amr.DisciplineID), new SqlParameter("@FinishingResult",amr.Result), new SqlParameter("@Placement", amr.Placement) }; return DBHelper.ExecuteNonQuery("spAthleteStatsnew", CommandType.StoredProcedure, pars); } The Stored Procedure INSERT INTO ATHLETE_MEETING_DISCIPLINE_RESULT(AthleteID,MeetingDisciplineID,FinishingResult,Placement) VALUES(@AthleteID,(SELECT me.MeetingDisciplineID FROM MEETING_EVENTS As me WHERE me.MeetingID= @MeetingID AND me.DisciplineID= @DisciplineID),@FinishingResult,@Placement)
Philippe Mori
Используйте блок кода для правильного форматирования кода, чтобы он был читабельным, и убедитесь, что код имеет правильный отступ. Почти никто не будет читать ваш код, если вы не заботитесь о его правильном форматировании.
Кстати, было бы не намного сложнее определить, какой столбец возвращает NULL...
ZurdoDev
Это так просто исправить. Все, что вам нужно сделать, - это самая простая отладка, и вы исправите ее быстрее, чем потребовалось для публикации этого вопроса.
Karthik_Mahalingam
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]