使用存储过程和两个参数将新行插入SQL数据库
本文关键字:参数 新行 插入 数据库 SQL 两个 存储过程 | 更新日期: 2023-09-27 18:19:54
我正试图使用一个包含两个参数的存储过程向SQL DB插入一个新行。我使用的是asp.net网格视图和第一列中的复选框,以便您可以选择行。对于所选的每一行,它将插入提供ProjectID的新行。CorpID与查询字符串一起提供。我把代码中的一些行注释掉了,因为这会给我带来错误,我不知道如何完成其余的操作。我正在YouTube上关注一段视频来完成这项工作。在视频中,他们正在删除行,但我正在尝试插入行。如果有人想要视频链接,那就是这个。这是我来自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; }
}
如果你需要更多信息来回答这个问题,请告诉我。非常感谢您的帮助。
尝试运行此示例并逐步完成代码,这将帮助您理解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
}
对于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
,所以它工作得很好。