thecoderques Ответов: 1

Мой метод 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

Это так просто исправить. Все, что вам нужно сделать, - это самая простая отладка, и вы исправите ее быстрее, чем потребовалось для публикации этого вопроса.

1 Ответов

Рейтинг:
0

ZurdoDev

Это так легко отладить, что вам действительно нужно работать над этим самостоятельно. Вы могли бы сделать это быстрее, чем время, необходимое для публикации этого сообщения.

Вы сказали, что пытаетесь вставить в 5 столбцов, но ваш SQL:

INSERT INTO ATHLETE_MEETING_DISCIPLINE_RESULT(AthleteID,MeetingDisciplineID,FinishingResult,Placement)


Это всего лишь 4 колонки, так что, конечно, ничто не войдет в 5-ю колонку. ;)


Maciej Los

5ед!