无法将值NULL插入列'AccountID',表TBLAccount'列不允许空值。 INSERT失败。该语句已终止

时间:2014-01-29 18:56:03

标签: c# asp.net sql sql-server

  

无法将值NULL插入“AccountID”列,表'e-BusPassManagementSystem.dbo.TBLAccount';列不允许此处为空。 INSERT失败。   声明已经终止。!

我的SQL语句是:

ALTER PROCEDURE SetApplicationForm
@UserID int,
@InstitueName varchar(50),
@ResidentalAddress varchar(max),
@Place varchar(max),
@WorkingDays int,
@Time int,
@Photo varchar(50),
@IDProof varchar(50),
@AppliedDate datetime,
@ValiedUpTo datetime,
@CardType varchar(10),
@Cardno varchar(50),
@CardExpDate datetime
AS
begin
insert into TBLApplicationForm(UserID, InstitueName, ResidentalAddress, 
                                   Place, WorkingDays, [Time], Photo, 
                                   IDProof, AppliedDate, ValidUpTo, Status)
     values(@UserID, @InstitueName, @ResidentalAddress, 
            @Place, @WorkingDays, @Time, @Photo,
            @IDProof, @AppliedDate, @ValiedUpTo, 'PENDING')

declare @ApplicationID int

set @ApplicationID = Scope_Identity()

insert into TBLAccount(UserID, ApplicationID, CardType, CardNumber, Amount, CardExpireDate, Status)
values(@UserID, @ApplicationID, @CardType, @Cardno, '200', @CardExpDate, 'PAID')
end

C#方法:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    try
    {
        ApplicationFormEntity objAppFrm = new ApplicationFormEntity();
        objAppFrm.Institute = txtInstituteName.Text;
        objAppFrm.UserID = Convert.ToInt32(Session["UserID"]);
        // strName = Convert.ToInt32(txtName.Text).ToString();
        objAppFrm.ResidentalAddress = txtResAddr.Text;
        objAppFrm.Place = txtPlace.Text;
        objAppFrm.WorkingDays = Convert.ToInt32(txtNOD.Text);
        objAppFrm.Time = Convert.ToInt32(txtTime.Text);
        string strPhoto = Path.GetFileName(fpPhoto.PostedFile.FileName);
        fpPhoto.SaveAs(Server.MapPath("Images/" + strPhoto));
        //   fileuploadimages.SaveAs(Server.MapPath("~/" + filename));
        objAppFrm.ProofID = Path.GetFileName(fpIDProof.PostedFile.FileName);
        fpPhoto.SaveAs(Server.MapPath("File/" + objAppFrm.ProofID));
        objAppFrm.AppliedDate = System.DateTime.Now;
        objAppFrm.ValidUpTo = System.DateTime.Now;
        objAppFrm.CardType = ddlCardType.Text;
        objAppFrm.Cardno = txtCardNumber.Text;
        objAppFrm.CardExpDate =DateTime.Parse(txtCardED.Text);
        bool blResult = BusinessLayer.ApplicationFormBL.SetApplicationForm(objAppFrm,strPhoto);
        if (blResult)
        {
            lblMsg.Text = "Application applied successfully";
        }
        else
        {
            lblMsg.Text = "Not Applied";
            ClearApplicationForm();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

public class ApplicationFormDB
{
    public static bool SetApplicationForm(ApplicationFormEntity objAppFrm,string strPhoto)
    {
        try
        {
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "SetApplicationForm";
            cmd.Parameters.AddWithValue("@UserID",objAppFrm.UserID);
            cmd.Parameters.AddWithValue("@InstitueName", objAppFrm.Institute);
            cmd.Parameters.AddWithValue("@ResidentalAddress",objAppFrm.ResidentalAddress);
            cmd.Parameters.AddWithValue("@Place",objAppFrm.Place);
            cmd.Parameters.AddWithValue("@WorkingDays",objAppFrm.WorkingDays);
            cmd.Parameters.AddWithValue("@Time",objAppFrm.Time);
            cmd.Parameters.AddWithValue("@Photo",strPhoto);
            cmd.Parameters.AddWithValue("@IDProof",objAppFrm.ProofID);
            cmd.Parameters.AddWithValue("@AppliedDate",objAppFrm.AppliedDate);
            cmd.Parameters.AddWithValue("@ValiedUpTo",objAppFrm.ValidUpTo);
            cmd.Parameters.AddWithValue("@CardType", objAppFrm.CardType);
            cmd.Parameters.AddWithValue("@Cardno", objAppFrm.Cardno);
            cmd.Parameters.AddWithValue("@CardExpDate", objAppFrm.CardExpDate);

            int intResullt=DBLayer.ExecuteNonQuery(cmd);
            if(intResullt>0)
                return true;
            else
                return false;
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }

3 个答案:

答案 0 :(得分:1)

TBLAccount期待AccountID列中的非空值。您的存储过程和SetApplicationForm方法无法处理此问题。如果您希望它是自动增量ID字段,则可能已将列设置错误。

答案 1 :(得分:1)

如果数据类型为TBLAccount.AccountIDIdentity,我认为您需要将int设为bigint列。否则你需要在SP的第二个插入命令中为它指定一个值。

如果您的TBLAccount.AccountIDuiqueidentifier,请将默认值设为(newId())

答案 2 :(得分:0)

检查表dbo.TBLAccount模式定义,您应该有一个带有NOT NULL定义的AccountID列,您可以在不更改当前代码的情况下允许null,或者在当前代码中为其设置值:

enter image description here