注册 登录
编程论坛 ASP.NET技术论坛

GridView中怎样删除数据库中的数据?急啊!

stonefang 发布于 2007-05-18 23:14, 3226 次点击
我写了下面的代码,但不能实现功能,太忙改一下,小弟急啊.
SqlConnection con = DB.CreateConn();
st_sqlstr = "delete from Teacher where Teaher_id='"+this.Gv_teach.DataKeys[e.RowIndex].Value+"'";
con.Open();
SqlCommand cmd = new SqlCommand(st_sqlstr,con);
cmd.ExecuteNonQuery();
Response.Write("<script language='javascript'>alert('删除成功')</script>");
St_BindGridView();
12 回复
#2
guming2007-05-19 01:33

SqlConnection con = DB.CreateConn();
st_sqlstr = "delete from Teacher where Teaher_id='"+this.Gv_teach.DataKeys[(int)e.RowIndex].Value+"'";
con.Open();
SqlCommand cmd = new SqlCommand(st_sqlstr,con);
cmd.ExecuteNonQuery();
St_BindGridView();//先邦定再显示对话框
Response.Write("<script language='javascript'>alert('删除成功')</script>");

还有:要将Gv_teach表的初始邦定放在
if(!IsPostBack)
{
//邦定到数据
}
中。。。。。。。。
你再试试吧。。。

#3
tel19822007-05-20 11:31
你在绑定中写这一句了吗?this.你的gridviewID.datakeyname="绑定的ID";
#4
rainic2007-05-20 11:55
这什么要先邦定再显示对话框?

我觉得应该先显示对话框再邦定
#5
stonefang2007-05-20 22:21

我按你们的提示改写的代码,在执行的时候提示是数据库的用户代码未处理 System.Data.SqlClient.SqlException
Message="DELETE 语句与 COLUMN REFERENCE 约束 'FK_Class_Teacher' 冲突。该冲突发生于数据库 'ST_DataBase',表 'Class', column 'Class_teacher_id'。\r\n语句已终止。"请问在对表中有外键的时候怎么删除数据?
protected void Gv_teach_RowDeleting(object sender, GridViewDeleteEventArgs e)
{//删除数据
SqlConnection con = DB.CreateConn();
con.Open();
string sqlstr = "delete from Teacher where Teacher_id='"+Gv_teach.DataKeys[e.RowIndex].Value.ToString()+"'";
SqlCommand sqlcom = new SqlCommand(sqlstr, con);

sqlcom.ExecuteNonQuery();
try
{
sqlcom.ExecuteNonQuery();
Lbl_note.Text = "删除成功";

}
catch (SqlException)
{
Lbl_note.Text = "删除失败";
Lbl_note.Style["color"] = "red";
}
sqlcom.Connection.Close();
St_BindGridView();
}

#6
stonefang2007-05-20 22:21
完整的错误提示是:
用户代码未处理 System.Data.SqlClient.SqlException
Message="DELETE 语句与 COLUMN REFERENCE 约束 'FK_Class_Teacher' 冲突。该冲突发生于数据库 'ST_DataBase',表 'Class', column 'Class_teacher_id'。\r\n语句已终止。"
Source=".Net SqlClient Data Provider"
ErrorCode=-2146232060
Class=16
LineNumber=1
Number=547
Procedure=""
Server="127.0.0.1"
State=0
StackTrace:
在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
在 St_Teacher.Gv_teach_RowDeleting(Object sender, GridViewDeleteEventArgs e) 位置 f:\bysj2\St_teacher.aspx.cs:行号 68
在 System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e)
在 System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex)
在 System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup)
在 System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
#7
tel19822007-05-20 22:44

给你一点参考代码:
//先绑定
private void bindTogvQz()
{
string strsql = ConfigurationManager.ConnectionStrings["qzsql"].ConnectionString;
SqlConnection con = new SqlConnection(strsql);
con.Open();
string selectstr = "select * from qztable";
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = new SqlCommand(selectstr,con);
DataSet ds = new DataSet();
sda.Fill(ds,"qzList");
string[] qz = new string[] {"qzID"};
this.gvQz.DataKeyNames = qz;
//this.gvQz.DataKeyNames = "qzID";
this.gvQz.DataSource = ds.Tables["qzList"].DefaultView;
this.gvQz.DataBind();
sda.Dispose();
con.Close();
con.Dispose();
}
//然后
protected void gvQz_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//try
//{
string strID = this.gvQz.DataKeys[e.RowIndex].Value.ToString();
string strsql = ConfigurationManager.ConnectionStrings["qzsql"].ConnectionString;
SqlConnection con = new SqlConnection(strsql);
con.Open();
string deletestr = "delete from qztable where qzID=" + strID;
SqlCommand cmd = new SqlCommand(deletestr, con);
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
con.Dispose();
this.bindTogvQz();
//}
//catch
//{
// Response.Write("有点错误!");
//}
}

#8
bygg2007-05-21 09:19
为什么不把数据库的连接写到一个统一的地方呢?如果数据库需要修改时,,,得改多少个地方?
#9
rainic2007-05-21 09:25
Message="DELETE 语句与 COLUMN REFERENCE 约束 'FK_Class_Teacher' 冲突。该冲突发生于数据库 'ST_DataBase',表 'Class', column 'Class_teacher_id'。

是不是要把对应的数据也同时删除?
不过应该不是的呀...

这样的约束我没用过,不清楚,楼主为何不把约束去掉?
#10
stonefang2007-05-21 15:46
我是要删除表中的一条数据,其中的一个字段是另外一张表的主键,没有约束也会出错,不知道怎么办?

还有8楼的那位老兄,不知道你是说我的还是说7楼的?我的数据库连接是有类DB写的.我只会用那种方法.请你指点哈还可以怎么写,行更好?
#11
foshan2007-05-22 09:16
以下是引用bygg在2007-5-21 9:19:54的发言:
为什么不把数据库的连接写到一个统一的地方呢?如果数据库需要修改时,,,得改多少个地方?

斑竹的意思是建立三层结构,将与数据库有关的代码全部写在数据访问层?偶现在在啃三层结构,数据访问层还容易理解,但业务逻辑层就一团晕……

#12
misswang2010-03-12 12:56
你这是主外键直接没有设置他们的关系是层叠。。。设置后估计就不会出现主外键约束的问题了
把那个数据关系视图打开,把你那个'FK_Class_Teacher' 删除,再重新建立关系,并修改那个层叠关系
#13
传统大侠2010-03-12 17:45
学学用三层结构吧,思路更清晰点。我感觉在gridview中删除数据的话用模板列是最好的了。即添加一个模板列,在模板列中放入一个button或者linkbutton之类的,把按钮的CommandArgument属性绑定到你的id上,然后在按钮的单击事件中取出id进行删除就可以了。那个约束应该是没什么问题的。
1