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("删除成功!"); }
}
这样只能删除两张表的内容 展开
{
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("删除成功!"); }
}
这样只能删除两张表的内容 展开
1个回答
展开全部
(中文命名的数据库表真是碉堡。。)
你这个代码块的作用如果是需要一次删除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("删除执行失败");
看你自己的需要了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询