hi,
i have a page where a gridview is generated dynamically based on dropdown selections,
i was able to generate textbox controls in desired column and insert data to it and able to display data in same textbox on postback/save button click
i am facing issues while saving values to database,
i am able to save textbox values, and id of parameters generated in gridview to two string variable using , delimeter,
used split function to split data in sp to save to database, my SP executed without errors but database is not getting update
can some one help me find my mistake
we are using sqlhelper classes , a delegate for achieving this
// on button click
protected void btnSaveValues_Click(object sender, EventArgs e)
{
if (ViewState["Currenttable"] != null)
{
vesId = Convert.ToInt32(ddlVesselList.SelectedValue);
int analysis_Id = Convert.ToInt32(ddlanalysis.SelectedValue);
int valuetype = Convert.ToInt32(ddlvalueswith.SelectedValue);
try
{
string AnalysisName = ddlanalysis.SelectedItem.ToString();
Saveval(AnalysisName);
}
catch (Exception objEx)
{
ErrorLogDAL objErrorLogManager = new ErrorLogDAL();
objErrorLogManager.AddErrorLog(objEx);
objErrorLogManager = null;
}
}
}
// My Save Method
public void Saveval(string AnalysisName)
{
int vesId = Convert.ToInt32(ddlVesselList.SelectedValue);
DateTime.TryParseExact(txtsaildate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out saildt);
string strDate = saildt.Date.ToString("MM-dd-YYYY");
decimal qdmt = Decimal.Parse(lblDMTvalue.Text);
decimal qwmt = Decimal.Parse(txtwmt.Text);
decimal moist = Decimal.Parse(txtmoist.Text);
int status = 0;
int valid = 1;
SaveShipValues_delegate del = null;
int analysis_Id = Convert.ToInt32(ddlanalysis.SelectedValue);
selction = Convert.ToInt32(ddlvalueswith.SelectedValue);
DataTable dtparam = TestsBLL.GetParamtoTable(analysis_Id, selction);
foreach (DataRow drparam in dtparam.Rows)
{
paramId = Convert.ToInt32(drparam["Parameter_Id"]) + "," + paramId;
}
try
{
pIndx = 0;
if (AnalysisName == "xxx")
{
foreach (GridViewRow gr in gridshipval.Rows)
{
TextBox txtbox = (TextBox)gr.FindControl("txtbox'"+pIndx+"'");
if (txtbox != null)
{
string strRegExp = "^([0-9]{1,25})?(.[0-9]{0,8})?$";
txtbox.CausesValidation = true;
txtbox.MaxLength = 6;
if (System.Text.RegularExpressions.Regex.IsMatch(txtbox.Text, strRegExp))
{
shpVals = txtbox.Text + "," + shpVals;
pIndx++;
}
else
{
txtbox.BorderColor = System.Drawing.Color.Red;
lblMsg.Text = "Please give only numbers";
shpVals = "";
valid = 0;
break;
}
}
else break;
}
}
else if (AnalysisName == "yyy") ........
// IN BUSINESS LAYER
public static int SaveShpValues( string shpVals, string user, out int status, int intAnalysisId, int valwith, decimal qdmt, decimal qwmt, decimal moisture, string strDate, string strAnal, int vesId, string paramId, int grade)
{
int intStatus = 0;
intStatus = TestsDLL.SaveShpValues(shpVals, user, out status, intAnalysisId, valwith, qdmt, qwmt, moisture, strDate, strAnal, vesId, paramId, grade);
return intStatus;
}
here intStatus is returning 0 in BLL
i am able to pass values to the variables and while debugging i can see these but intStatus is returning 0
// IN My DATA ACCESS LAYER passing parameters
public static int SaveShpValues( string shpVals, string user, out int status, int intAnalysisId, int valwith, decimal qdmt, decimal qwmt, decimal moisture, string strDate, string strAnal, int vesId, string paramId, int grade)
{
SqlParameter[] arrParam = null;
try
{
arrParam = new SqlParameter[13];
arrParam[0] = new SqlParameter("@shpVals", SqlDbType.VarChar);
arrParam[0].Value = shpVals;
arrParam[1] = new SqlParameter("@user", SqlDbType.VarChar, 30);
arrParam[1].Value = user;
arrParam[2] = new SqlParameter("@qdmt", SqlDbType.Decimal);
arrParam[2].Value = qdmt;
arrParam[3] = new SqlParameter("@qwmt", SqlDbType.Decimal);
arrParam[3].Value = qwmt;
arrParam[4] = new SqlParameter("@moisture", SqlDbType.Decimal);
arrParam[4].Value = moisture;
arrParam[5] = new SqlParameter("@valwith", SqlDbType.Int);
arrParam[5].Value = valwith;
arrParam[6] = new SqlParameter("@strAnal", SqlDbType.VarChar);
arrParam[6].Value = strAnal;
arrParam[7] = new SqlParameter("@status", SqlDbType.Int);
arrParam[7].Direction = ParameterDirection.Output;
arrParam[8] = new SqlParameter("@vesId", SqlDbType.Int);
arrParam[8].Value = vesId;
arrParam[9] = new SqlParameter("@strDate", SqlDbType.VarChar);
arrParam[9].Value = strDate;
arrParam[10] = new SqlParameter("@paramId", SqlDbType.VarChar);
arrParam[10].Value = paramId;
arrParam[11] = new SqlParameter("@intAnalysisId", SqlDbType.Int);
arrParam[11].Value = intAnalysisId;
arrParam[12] = new SqlParameter("@grade", SqlDbType.Int);
arrParam[12].Value = grade;
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "SP_SaveShpValues", arrParam);
if (arrParam[7].Value != DBNull.Value) // status
status = Convert.ToInt32(arrParam[7].Value);
else
status = 0;
return status;
}
catch (Exception objEx)
{
ErrorLogDAL objErrorLogManager = new ErrorLogDAL();
objErrorLogManager.AddErrorLog(objEx);
objErrorLogManager = null;
status = 0; return status;
}
finally
{
arrParam = null;
}
}
// in my code behind in save method
string strAnal = ddlanalysis.SelectedItem.ToString();
int grade = Convert.ToInt32(ddlgrade.SelectedValue);
del = new SaveShipValues_delegate(TestsBLL.SaveShipValues);
IAsyncResult res = null;
res = del.BeginInvoke(shpVals, Convert.ToString(Session["UserName"]), out status, Convert.ToInt32(ddlanalysis.SelectedValue), Convert.ToInt32(ddlvalueswith.SelectedValue), qdmt, qwmt, moist, strDate, strAnal, vesId, paramId,grade, null, null);
lblMsg.Text = "Values Saved Successfully, Please check updated values after 2 minutes.";
-- MY STORED PROCEDURE
ALTER PROCEDURE [dbo].[SP_SaveShpValues]
@shpVals varchar(max),
@user varchar(30),
@qdmt decimal(8,3),
@qwmt decimal(8,3),
@moist decimal(8,3),
@valwith int,
@strAnal varchar(30),
@status int out,
@vesId int,
@strDate varchar(50),
@paramId varchar(max),
@intAnalysisId int,
@grade int
AS
declare @var_shipvalues varchar(max)
declare @var_paramid varchar(700)
declare @var_user varchar(30)
declare @var_QDMT decimal(8,3)
declare @var_saildate varchar=null
declare @var_vesselid int
declare @varvaltime varchar
declare @var_date date
BEGIN
set @var_shipvalues =@shpVals
set @var_paramid=@paramId
set @var_sdate=@strDate
set @var_vesselid=@vesId
set @varvaltime= sysdatetime()
SET @strDate=(SELECT REPLACE(@strDate,'"',''))
SET @var_date= (SELECT CAST(@strDate as DATE))
SELECT Shp_Value_Id FROM TRAN_ST_VALUES WHERE SDate=@var_date AND Vessel_Id=@vesId AND Analysis_Id= @intAnalysisId AND IsDeleted=0 AND IsActive=1
BEGIN
select Value.Value, Shp_Parameter_Id,Shp_Parameter_Id
from (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) RowNo,Item Value FROM dbo.SplitString(@var_shipvalues, ',') ) Value,
(SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) RowNo,Item Shp_Parameter_Id FROM dbo.SplitString(@var_paramid, ',') ) Shp_Parameter_Id
where Value.RowNo =Shp_Parameter_Id.RowNo
INSERT INTO TRAN_ST_VALUES(SDate, Vessel_Id, Analysis_Id , ValueTime, Valuewith, Grade)
VALUES( @var_date,@vesId,@intAnalysisId,@varvaltime,@valwith,@grade)
END
END