c#操作mysql 执行语句_c# 数据库编程(通过SqlCommand 执行DML语句)

原来一直是java,python等语言,最近用c#语言,并编写数据库访问代码。使用了之后,这里总结下,分享下c#如何操作数据库。

在java等其它语言中,有一套标准的api来完成数据库访问,并且一般都是通过sql语句来访问的。而在c#中,提供了多种灵活的方式。

大致可以分为:

1)和其它语言一样,直接利用sql命令(包括存储过程)操作数据库

2)利用sql语句,同时结合DataSet、DataAdapter等Api,提高使用的效率

3)与gui程序结合,与DataGridView等可视化组件结合。

本文介绍第一种方式。对于第一种方式,主要分为更新语句和查询语句,需要考虑的有:

1)单条和批量更新语句的执行

2)参数绑定

3)事务处理

.........

下面我们按照常用的使用场景一 一来介绍。

一、更新操作(单条语句)

直接上代码

usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;namespaceDbExample

{classDbActor

{public voidupdateDb()

{

SqlConnection conn=getConnection();try{

conn.Open();

SqlCommand command= new SqlCommand("insert userinfo values('aaa','bb')", conn);int re =command.ExecuteNonQuery();if (re == 1)

{

System.Console.WriteLine("inset success");

}else{

System.Console.WriteLine("inset error");

}

}catch(Exception ex)

{

System.Console.WriteLine(ex.Message);

}finally{

conn.Close();

}

}privateSqlConnection getConnection()

{string strConnection = @"Data Source = localhost\SQLEXPRESS; Initial Catalog = mydb; User Id = sa; Password = 12345678;";

SqlConnection conn= newSqlConnection(strConnection);returnconn;

}

}

}

需要注意几点:

1)数据库链接是资源,使用完需要释放。这在所有其它语言的数据库访问中都是这样的。

2)c#比较讨厌的是,它针对不同的数据库,有不同的数据访问对象(类名不同,所在的命名空间不同),这里的api都是Sqlxxxxx,以Sql打头的api是访问sql server数据库的api。这点在使用时需要注意。

3)ExecuteNonQuery 方法的返回值是执行sql命令后影响的记录的条数。

二、参数绑定

执行sql命令,最基本的就是拼凑一个完整的sql语句执行。但更常用的做法是进行参数传递的方式,这样可以有效利用数据库的特性,提高同类sql语句(sql命令一样,只是命令的值不同)的执行效率。举例代码如下:

public voidupdateDbByPara()

{

SqlConnection conn=getConnection();try{

conn.Open();

SqlCommand command= new SqlCommand("insert userinfo values(@name,@pass)", conn);

command.Parameters.Add(new SqlParameter("@name","x1"));

command.Parameters.Add(new SqlParameter("@pass", "123"));

command.ExecuteNonQuery();

}catch(Exception ex)

{

System.Console.WriteLine(ex.Message);

}finally{

conn.Close();

}

}

注意:sql语句中的  @参数名  不能用引号括起来,否则就当作字符串值了。

三、事务

当同时执行多条dml语句时,需要考虑在一个事务中执行。下面给出一个例子:

public voidupdateDbByTrans()

{

SqlConnection conn=getConnection();

SqlTransaction trans= null;try{

conn.Open();

trans=conn.BeginTransaction();

SqlCommand command= new SqlCommand("insert userinfo values(@name,@pass)", conn,trans);

command.Parameters.Add(new SqlParameter("@name", "x5"));

command.Parameters.Add(new SqlParameter("@pass", "123"));

command.ExecuteNonQuery();

command.Parameters.Clear();

command.Parameters.Add(new SqlParameter("@name", "x4"));

command.Parameters.Add(new SqlParameter("@pass", "123"));

command.ExecuteNonQuery();

trans.Commit();

}catch(Exception ex)

{

MessageBox.Show(ex.Message);try{

trans.Rollback();

}catch{ }

}finally{

conn.Close();

}

}

上面执行了两个sql语句,如果第一个语句成功,但第2个语句失败,因为在一个事务中,第一个语句也不会生效。

本文介绍了如何直接利用sql语句进行数据库的更新操作,下面的文章会接着进行数据库查询等操作的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值