C# 在3层体系结构中将动态gridview文本框值和选择值保存到数据库

C# 在3层体系结构中将动态gridview文本框值和选择值保存到数据库,c#,sql,asp.net,sql-server-2012,data-controls,C#,Sql,Asp.net,Sql Server 2012,Data Controls,我有一个基于下拉选择动态生成gridview的页面 我能够在所需的列中生成文本框控件并向其中插入数据,并且能够在回发/保存按钮单击时在同一文本框中显示数据 我在将值保存到数据库时遇到问题 我可以使用delimeter将文本框值和gridview中生成的参数id保存为两个字符串变量 我在存储过程中使用了一个split函数来拆分字符串中的值,我的SP执行时没有给出任何错误,但数据库没有得到更新 使用sqlhelper类,委托 有人能帮我找到我的错误吗 ALTER PROCEDURE [dbo

我有一个基于下拉选择动态生成gridview的页面

我能够在所需的列中生成文本框控件并向其中插入数据,并且能够在回发/保存按钮单击时在同一文本框中显示数据

我在将值保存到数据库时遇到问题

我可以使用delimeter将文本框值和gridview中生成的参数id保存为两个字符串变量

我在存储过程中使用了一个split函数来拆分字符串中的值,我的SP执行时没有给出任何错误,但数据库没有得到更新 使用sqlhelper类,委托

有人能帮我找到我的错误吗

    ALTER PROCEDURE [dbo].[SP_SaveShpValues]
    @shpVals varchar(max),
    @user varchar(30),
    @qdmt decimal(8,3),
    @qwmt decimal(8,3),
    @moisture decimal(8,3),
    @valwith int,
    @strAnal varchar(30),
    @status int out,
    @vesId int,
    @sDate varchar(50),
    @paramId varchar(max),
    @intAnalysisId int,
    @grade int
AS
declare @varvaltime varchar
开始

结束 我尝试将varchar转换为十进制,如下所示

大宗报价

通过从dbo中选择0行编号,将项目转换为十进制值,在订单上选择行编号。SplitString@shpVals,','值

--IN MY BLL--
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;
   }
此处intStatus在BLL中返回0 我可以将值传递给变量,并且在调试时可以看到这些值,但intStatus返回0

-在我的数据访问层DLL中-

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;
       }
   }
-暗藏-

public void Saveval(string AnalysisName)
   {
       int vesId = Convert.ToInt32(ddlVesselList.SelectedValue);
       DateTime.TryParseExact(txtsaildate.Text.ToString(), "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;
               }
           }
如果AnalysisName==yyy,则为else--

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.";
有人能帮我发现并纠正我的错误吗

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.";