我正在尝试使用带有两个参数的存储过程向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; }
}
如果您需要更多信息来回答这个问题,请与我们联系。非常感谢任何帮助。
答案 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
,因此效果很好。