使用存储过程和两个参数将新行插入SQL DB

时间:2015-10-30 19:49:43

标签: c# mysql asp.net sql-server stored-procedures

我正在尝试使用带有两个参数的存储过程向SQL DB插入一个新行。我在第一列中使用了asp.net gridview和复选框,以便您可以选择该行。对于选定的每一行,它将插入提供ProjectID的新行。 CorpID提供有查询字符串。我在代码中注释掉了一些行,因为它给了我错误,我不知道如何做其余的事情。我正在关注YouTube上的视频以完成此操作。在视频中,他们正在删除行,但我试图插入行。如果有人想要视频链接,请this。这是我在DataAccessLayer中的代码

public void AssociateCorpToProj(ProjectData pd) 
{
    using(SqlConnection cn = new SqlConnection(_dbConnection)) 
    {
        using(SqlCommand cm = new SqlCommand("InsertProjectEntity", cn)) 
        {
            cm.CommandType = CommandType.StoredProcedure;
            cn.Open();
            cm.Parameters.AddWithValue("@ProjectID", pd.ProjectID);
            cm.Parameters.AddWithValue("@CorpID", pd.CorpID);
            cm.ExecuteNonQuery();
            cn.Close();
        }
    }
}

这是我的代码后面的代码,它调用DataAccessLayer

中的方法
protected void btnAssociateProjects_Click(object sender, EventArgs e) 
{
    List < object > lstCorpProjAssoc = new List < object> ();
    foreach(GridViewRow gvRow in gvProjects.Rows) 
    {
        if (((CheckBox) gvRow.FindControl("cbInsert")).Checked) 
        {
            string cID = ((Label) gvRow.FindControl("lblProjectID")).Text;
            lstCorpProjAssoc.Add(cID);
        }
    }

    foreach(ProjectData str in lstCorpProjAssoc)
    {
        DALSectionAccessData ap = new DALSectionAccessData(connString);
        ProjectData pd = new ProjectData();
        ap.AssociateCorpToProj(str);

    }

}

如果有人认为他们需要存储过程的代码,那么就是。

INSERT INTO [dbo].[ProjectEntity]
     ([ProjectID],[CorpID])
VALUES
     (@ProjectID, @CorpID)

此外,我正在使用的列表类

public class ProjectData
{
public string CompanyName { get; set; }
public int ProjectID { get; set; }
public int CorpID { get; set; }
}

如果您需要更多信息来回答这个问题,请与我们联系。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试运行此示例并逐步执行代码,这有助于您了解List<object> vs List<string> vs List<Class>

var listAllData = new List<object>();
for (var cnt = 0; cnt< 10; cnt++)
{
    var lstProjectData = new List<object>() //you need to change yours to be new List<ProjectData>
    {
       string.Empty, //CompanyName
       0, //ProjectID
       0 //CorpId
    }; 

    lstProjectData [0] = string.Format("CompanyName {0}", cnt);
    lstProjectData [1] = cnt+ 1;
    lstProjectData [2] = cnt+ 2;
    listAllData.Add(lstProjectData );

//from your List<ProjectData> you should be able to get at the variable
//as follows someVariable.CompanyName = , 
//someVariable.ProjectId = , 
//and someVariable = CorpId
}

答案 1 :(得分:0)

对于DataAccessLayer中的代码:

public void AssociateCorpToProj(int pd, int cd) 
{
    using(SqlConnection cn = new SqlConnection(_dbConnection)) 
    {
        using(SqlCommand cm = new SqlCommand("InsertProjectEntity", cn)) 
        {
            cm.CommandType = CommandType.StoredProcedure;
            cn.Open();
            cm.Parameters.AddWithValue("@ProjectID", pd);
            cm.Parameters.AddWithValue("@CorpID", cd);
            cm.ExecuteNonQuery();
            cn.Close();
        }
    }
}

对于从DataAccessLayer调用方法的代码后面的代码:

protected void btnAssociateProjects_Click(object sender, EventArgs e) 
{
    List < int > lstCorpProjAssoc = new List < int > ();
    foreach(GridViewRow gvRow in gvProjects.Rows) 
    {
        if (((CheckBox) gvRow.FindControl("cbInsert")).Checked) 
        {
            int cID = Convert.ToInt32(((Label) gvRow.FindControl("lblProjectID")).Text);
            lstCorpProjAssoc.Add(cID);
        }
    }
    foreach(int pstr in lstCorpProjAssoc) 
    {
        DALSectionAccessData ap = new DALSectionAccessData(connString);
        ap.AssociateCorpToProj(pstr, _cID);

    }
}

不使用列表类。我测试了它,它工作。这些参数都是int,因此效果很好。