单击更新后,sql server db中的行将被删除。 id 是唯一有数据的字段
Posted
技术标签:
【中文标题】单击更新后,sql server db中的行将被删除。 id 是唯一有数据的字段【英文标题】:Rows in sql server db being deleted once I click update. the id is only field that has data 【发布时间】:2015-05-11 17:41:01 【问题描述】:我终于克服了这些错误,但现在我遇到了我的数据库没有用我的 DataGridView 数据更新的问题。不知道为什么不更新。
protected void gvKeyPersonnel_RowUpdating(object sender, EventArgs e)
using (SqlCommand cmd = new SqlCommand())
cmd.Connection = conn;
conn.Open();
// SqlDataReader myReader = null;
// myReader = cmd.ExecuteReader();
foreach (GridViewRow row in gvKeyPersonnel.Rows)
cmd.Parameters.Clear();
cmd.CommandText = @"UPDATE SP2010_EDCStaffing_AppDB.dbo.CMS_Key_Personnel SET Name = @Name, VDCIDIQ = @VDCIDIQ, VDCFFS = @VDCFFS, VDCHIM = @VDCHIM, VDCWEBHOSTING = @VDCWEBHOSTING, VDCCWF = @VDCCWF WHERE ID = @id";
cmd.Parameters.AddWithValue("@id", Convert.ToInt32(gvKeyPersonnel.DataKeys[row.RowIndex].Values[0]));
cmd.Parameters.AddWithValue("@Name", row.Cells[1].Text);
cmd.Parameters.AddWithValue("@VDCIDIQ", row.Cells[2].Text);
cmd.Parameters.AddWithValue("@VDCFFS", row.Cells[3].Text);
cmd.Parameters.AddWithValue("@VDCHIM", row.Cells[4].Text);
cmd.Parameters.AddWithValue("@VDCWEBHOSTING", row.Cells[5].Text);
cmd.Parameters.AddWithValue("@VDCCWF", row.Cells[6].Text);
cmd.ExecuteNonQuery();
conn.Close();
【问题讨论】:
你为什么要int @id = Convert.ToInt32(gvKeyPersonnel.DataKeys[row.RowIndex].Values[0]);
?这不会将参数添加到您的命令对象,而是对 cmd.Paramaters.AddWithValue("@id", Convert.ToInt32(gvKeyPersonnel.DataKeys[row.RowIndex].Values[0]));
执行类似的操作 @name
参数。
你需要谷歌 msdn command.Parameters.Add 方法使用参数化查询也将你所有的执行代码包装在一个 trycatch 你不需要调用 conn.Close();
时为你使用的句柄做自动处理
它不喜欢“参数”。我需要先设置一些东西吗?
除了之前评论者提出的担忧之外,您确定Values[1]
存在吗?
克服了参数错误。但仍然获得 OOR 范围。
【参考方案1】:
你
cmd.CommandText = @"UPDATE
不需要@
就行了
cmd.CommandText = "UPDATE
并确保您与数据库的连接由以下人员打开
conn.Open();
【讨论】:
以上是关于单击更新后,sql server db中的行将被删除。 id 是唯一有数据的字段的主要内容,如果未能解决你的问题,请参考以下文章
从 sql server 获取选定的值到 php 中的下拉列表
在本地使用数据库时应该首选哪个数据库 - Access DB 或 Sql Server DB? [关闭]