C#中绑定数据库后要删除3张表中的一条数据要如何实现

using(SqlConnectionconn=newSqlConnection(connString)){stringsql=string.Format("delete... using ( SqlConnection conn = new SqlConnection(connString) )
{
string sql = string.Format("delete from 职工管理 where 职工管理.职工编号={0}", id);
SqlCommand cmd = new SqlCommand( sql, conn );
sql = string.Format("delete from 人事管理 where 职工编号={0}", id);
cmd = new SqlCommand(sql, conn);
// sql = string.Format("delete from 薪资福利管理 where 职工编号={0}", id);
// cmd = new SqlCommand(sql, conn);
conn.Open( );
int n = Convert.ToInt32(cmd.ExecuteNonQuery());
if ( n != 1 )
{ MessageBox.Show("删除失败!"); }
else
{ MessageBox.Show("删除成功!"); }
}
这样只能删除两张表的内容
展开
 我来答
376710727
2016-06-12 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1274万
展开全部

(中文命名的数据库表真是碉堡。。)

你这个代码块的作用如果是需要一次删除3个表的内容,并且需要控制执行结果(执行成功或者失败),最好是用存储过程、或者事务来执行,以便回滚。(比如删除了前两个表的内容,第三个表删除失败,你需要回滚,否则数据就乱套了)。

而且不要通过ExectueNonQuery的执行行数来判断是否删除成功, 而要从设计上就避免误删除、或者无效删除, 即你传入的ID,一定是要可以删除的(获得这个ID的时候你逻辑要做好处理), 而具体数据库删除了多少条,不要去控制他,否则就没完没了。

事务的写法:

 SqlConnection conn = new SqlConnection();
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["dbconnstr"].ConnectionString;
            conn.Open();
            var myTran = conn.BeginTransaction();
            SqlCommand mycom = new SqlCommand();
            mycom.Connection = conn;
            mycom.Transaction = myTran;
            try
            {
                mycom.CommandText = string.Format("delete from 职工管理 where 职工管理.职工编号={0}", id);
                mycom.ExecuteNonQuery(); //执行
                mycom.CommandText = .....
                mycom.ExecuteNonQuery(); //执行第二句
                //.... 执行第三句
                
                myTran.Commit(); //提交事务
            }
            catch()//执行失败
            {
                myTran.RollBack(); //回滚 
            }

只要数据层不报错,那么删除就认为是成功的, 至于他删除了几行,不应该由这里来控制,而是在传入ID(执行删除方法之前) 就要去处理的,比如查询这个表是否有这么一行 里面有这个ID,   这样代码的耦合性可以降低,维护也方便。

更多追问追答
追问
当时建的时候没考虑到,就想着方便看就用中文了o(╯□╰)o
conn.ConnectionString = ConfigurationManager.ConnectionStrings["dbconnstr"].ConnectionString;这一句不理解,这ConfigurationManager,dbconnstr是什么,还有catch里要放什么?
追答
1。 这个是数据库连接字符串, 我这个是自己写的,是放在配置文件里的, 就是你项目中的app.config这里面, 可以自己配置的,
当然你直接把这一句改成conn.ConnectionString = "database = localhost;uid = sa;pwd =123456。。。。。。 " ,写你自己的连接字符串就可以了。
2。catch是指数据库事务执行出错之后进行的操作, RollBack是回滚, 这一句一般必须要带,否则就没有执行事务的意义了, 之后就是异常的处理,
比如throw new Exception("删除执行失败");
看你自己的需要了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式