无法将值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;
}
}
答案 0 :(得分:1)
TBLAccount
期待AccountID
列中的非空值。您的存储过程和SetApplicationForm
方法无法处理此问题。如果您希望它是自动增量ID字段,则可能已将列设置错误。
答案 1 :(得分:1)
如果数据类型为TBLAccount.AccountID
或Identity
,我认为您需要将int
设为bigint
列。否则你需要在SP的第二个插入命令中为它指定一个值。
如果您的TBLAccount.AccountID
为uiqueidentifier
,请将默认值设为(newId())
答案 2 :(得分:0)
检查表dbo.TBLAccount模式定义,您应该有一个带有NOT NULL定义的AccountID列,您可以在不更改当前代码的情况下允许null,或者在当前代码中为其设置值: