为什么我的简单插入不起作用?

时间:2017-02-08 01:58:11

标签: c# asp.net

我试图在完成成功之前测试一个简单的插入。 然而,无论我尝试什么,它都无法解决。

关于表单的一些背景知识。 表单包含自动填充数据的标签,其中一些标签需要用户自行输入。我只是使用3个简单的变量来测试。现在,即使我直接嵌入sql,数据也不会进入数据库。

        internal void UpdateEPMTRequest2(string EPMTNumber, string name, int status)
    {
        con.Open();
        //  var sql = "INSERT INTO EPMT_MASTER_REQUEST (EPMTID, , Status) values (@ePMTNumber, @name, @status)";

        // SqlCommand cmd = new SqlCommand("Exec[ePMT_SP_UpdateEPMTRequest2] '2', 'Tanagara', 0");
        SqlCommand cmd = new SqlCommand("ePMT_SP_UpdateEPMTRequest2", con);            
      //  SqlCommand cmd = new SqlCommand(sql, con);
       // cmd.Parameters.AddWithValue("@action", action);
        cmd.Parameters.AddWithValue("@ePMTNumber", EPMTNumber);
        cmd.Parameters.AddWithValue("@name", name);
        cmd.Parameters.AddWithValue("@status", status);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.ExecuteNonQuery();
        con.Close();
    }

      private void UpdateEPMTRequest2(string EPMTNumber, string name, int status)
    {
        try
        {
            eBiz.UpdateEPMTRequest2(EPMTNumber, name, status);
        }
        catch (Exception ex) { }
    }

   internal void UpdateEPMTRequest2(string EPMTNumber, string name, int status)
    {
        eDAO.UpdateEPMTRequest2(EPMTNumber, name, status);
    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["EPMTID"] != null)
        {
            string Action = "SaveUpdate";
            string EPMTNumber = Request.QueryString["EPMTID"].ToString();
            int status = Convert.ToInt32(ViewState["CStatus"].ToString());
           // UpdateEPMTRequest(Action, EPMTNumber, status);
            Response.Redirect("ePMTDraft.aspx?msg=1");
        }
        else
        {
            //  string Action = "Save";

            if (Request.QueryString["EPMTID"] == null)
                if (status == 0)
                    try
                    {                       
                    EPMTNumber = Request.QueryString["EPMTID"].ToString();
                    // UpdateEPMTRequest(Action, EPMTNumber, status);
                    UpdateEPMTRequest2(EPMTNumber, name, status);
                      }
                     catch (Exception ex) { }
                    Response.Redirect("ePMTDraft.aspx?msg=1");
                }
            }

      ALTER PROCEDURE [dbo].[ePMT_SP_UpdateEPMTRequest2]
-- Add the parameters for the stored procedure here
@ePMTNumber varchar(20),
@name varchar(100),     
@status int

AS 开始      - 添加SET NOCOUNT ON以防止出现额外的结果集      - 干扰SELECT语句。     SET NOCOUNT ON;

-- Insert statements for procedure here
INSERT INTO EPMT_MASTER_REQUEST (EPMTID, IssuerName, status) values (@ePMTNumber, @name, @status)

END

这种情况下的名称是一个自动填充的字段,它有一个会话值,我不知道是否应该使用会话值而不是字符串名称。

另一个问题是该名称给我一个错误 - 在上下文中找不到。该名称实际上是标签lblInititor.text。

1 个答案:

答案 0 :(得分:0)

在sql语句的注释代码中,列数和INSERT的值数不匹配。

如果你在storwd proc中使用相同的语句那么可能是错误的原因。

如果您调试并查看异常详细信息,您应该能够看到错误。

您需要更改插入语句,如下所示。

 var sql = "INSERT INTO EPMT_MASTER_REQUEST (EPMTID, Name, Status) values (@ePMTNumber, @name, @status)";

我不确定表格的确切列名,所以我认为它是“名字”。

如果这样做,你需要在存储过程中使用相同的查询。

这可以解决您的问题。