• c# 数据库编程(通过SqlCommand 执行DML语句)


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

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

    大致可以分为:

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

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

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

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

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

    2)参数绑定

    3)事务处理

    .........

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

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

    直接上代码

    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace DbExample
    {
        class DbActor
        {
            public void updateDb()
            {
                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();
                }
            }
    
            private SqlConnection getConnection()
            {
                string strConnection = @"Data Source = localhostSQLEXPRESS; Initial Catalog = mydb; User Id = sa; Password = 12345678;";
                SqlConnection conn = new SqlConnection(strConnection);
                return conn;
            }
        }
    }


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

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

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

    二、参数绑定

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

     public void updateDbByPara()
            {
                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 void updateDbByTrans()
            {
                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语句进行数据库的更新操作,下面的文章会接着进行数据库查询等操作的介绍。

  • 相关阅读:
    自己实现的string的库函数
    单链表的面试题
    顺序表的实现
    指针数组与数组指针
    指针与数组
    sizeof 与 strlen
    HTML配色工具!在线配色工具
    [转载] python的sorted函数对字典按key排序和按value排序
    [转载]python脚本删除一定时间以外的文件
    python基础教程(四)
  • 原文地址:https://www.cnblogs.com/51kata/p/5318501.html
Copyright © 2020-2023  润新知