zoukankan      html  css  js  c++  java
  • 数据库操作(C#)

      数据库在软件开发中发挥着举足轻重的作用,基本上所有的大项目都会用到数据库。ADO .Net是一组向.Net程序员公开数据访问服务的类,其主要分为数据提供程序(Data Provider)和数据集(Data Set),Data Provider主要分为SQLServer、ODBC、OLEDB、Oracle等四种。下面我主要简单介绍SQL Server 2008的C#操作(附件中另附MS Access 2010数据库(OLEDB)的C#简单操作),通过学习C#的数据库操作基础,再举一反三,开放思维,就可以进行大项目中数据库的软件开发。

    1、连接数据库(Connection对象)

    //连接数据库
    string strConn = "server=Gordon-PC\SQLEXPRESS;database=DB_GHC;uid=sa;pwd=123456";
    //string strConn = @"Data Source=localhostSQLEXPRESS;Initial Catalog=DB_GHC;Integrated Security=True";
    SqlConnection connSql = new SqlConnection(strConn);
    connSql.Open();
    if (connSql.State == ConnectionState.Open)
    {
        MessageBox.Show("连接成功");
    }

      注意,数据库操作完成要及时关闭连接,代码如下:

    connSql.Dispose();    //或connSql.Close();

      使用Close方法关闭连接后,可用Open方法再打开连接;而用Dispose方法关闭连接后不可使用Open方法打开连接,须再次重新初始化连接再打开

      另外,连接数据库的字符串也可放在.config配置文件(xml文件,在项目中“添加应用程序配置文件)中,配置文件代码如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="DBConnString" connectionString="server=Gordon-PCSQLEXPRESS;database=DB_GHC;uid=sa;pwd=123456"/>
      </connectionStrings>
    </configuration>

      使用配置文件中的连接字符串时,要添加引用system.configuration,调用代码如下所示:

    string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;

      关于SQL Server数据库的连接(字符串中等于号两边不能加空格):

      (1)服务器类型:数据库引擎

      (2)服务器名称 

    --服务器名实例名
    server = GAOHONGCHENSQLEXPRESS;    --
    Data Source = GAOHONGCHENSQLEXPRESS;
    
    --IP地址(可不加端口号,TCP/IP协议默认端口号1433)
    server = 192.168.56.6,1433;    --
    Data Source = 192.168.56.6,1433;

       注:SQL Server 2008支持Shared Memory、Named Pipes、TCP/IP、VIA等4种网络协议。默认情况下,SQL Server 使用“共享内存”协议连接到 SQL Server 的本地实例,使用“TCP/IP”或“命名管道”连接到其他计算机上的 SQL Server 实例。

      (3)数据库名

    database = DB_GHC;  --
    Initial Catalog = DB_GHC;

      (4)身份验证

    --当前Windows身份验证
    Integrated Security = SSPI (或 true, yes);  --
    Trusted_Connection = true (或 yes);
    
    --SQL Server身份验证(需用户名和密码)
    Integrated Security = false(或 no);  --
    Trusted_Connection = false(或 no);

      (5)用户名和密码

    uid = sa;
    pwd = 123456;

      关于连接SQLServer2008数据库字符串的写法请参见:http://www.cnblogs.com/tough/archive/2011/11/18/2254076.html

    2、执行SQL语句(Command对象)

    SqlCommand cmdSql = new SqlCommand();
    cmdSql.Connection = connSql;
    cmdSql.CommandText = "select * from Tb_GHC";
    cmdSql.CommandType = CommandType.Text;
    
    SqlDataReader readerSql = cmdSql.ExecuteReader();
    while (readerSql.Read())
    {
        listView1.Items.Add(readerSql[0].ToString());//读取数据表第[0]列
    }

      ExecuteReader方法:执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例。DataReader对象是数据读取对象,适用于快速读取数据而不需修改数据。

      ExecuteNonQuery方法:执行SQL语句,并返回受影响的行数,在使用SqlCommand向数据库发送增、删、改、查命令时,通常使用ExecuteNonQuery方法执行发送的SQL语句。 

      连接数据库并执行SQL语句,也可使用如下代码一步完成:

    SqlConnection connSql = new SqlConnection("server=Gordon-PC\SQLEXPRESS;database=DB_GHC;uid=sa;pwd=123456");
    SqlCommand cmdSql = new SqlCommand("select * from Tb_GHC",connSql);

      下面简单介绍SqlCommand的几种操作:

      

    string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
    SqlConnection connSql = new SqlConnection(strConn);
    connSql.Open();           
    if (connSql.State == ConnectionState.Open)
    {
        string sqlInsert = "INSERT INTO Tb_GHC(PersonName, BornDate, PersonAddress) VALUES('Hao', '19950625', 'Nanjing')";
        SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
        cmdSql.ExecuteNonQuery(); 
    }
    connSql.Dispose();   

      

    string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
    SqlConnection connSql = new SqlConnection(strConn);
    connSql.Open();           
    if (connSql.State == ConnectionState.Open)
    {
        string sqlDelete = "DELETE FROM Tb_GHC WHERE (PersonName = 'Gao')";
        SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
        cmdSql.ExecuteNonQuery(); 
    }
    connSql.Dispose(); 

      

    string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
    SqlConnection connSql = new SqlConnection(strConn);
    connSql.Open();           
    if (connSql.State == ConnectionState.Open)
    {
        string sqlUpdate = "UPDATE Tb_GHC SET PersonAddress = 'Dezhou' WHERE (PersonName = 'Lu')";
        SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
        cmdSql.ExecuteNonQuery(); 
    }
    connSql.Dispose();   

      

    string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
    SqlConnection connSql = new SqlConnection(strConn);
    connSql.Open();           
    if (connSql.State == ConnectionState.Open)
    {
        string sqlQuery = "SELECT PersonName, BornDate, PersonAddress FROM Tb_GHC";
        SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
        SqlDataReader readerSql = cmdSql.ExecuteReader();
        while (readerSql.Read())
        {
            listView1.Items.Add(readerSql[0].ToString());//读取数据表第[0]列
        }
    }
    connSql.Dispose();  

    3、数据适配器(DataAdapter)和数据集(DataSet)

      DataAdapter对象是一个数据适配器对象,是DataSet和数据源之间的桥梁。

      DataSet对象就像存放于内存中的一个小型的数据库,可以包含数据表、数据列、数据行、视图、约束以及关系。通常,DataSet的数据来源于XML或数据库。为了从数据库中获取数据,需使用数据适配器DataAdapter的SelectCommand属性与Command对象建立连接从数据库查询指定的数据,然后通过该对象的Fill方法填充DataSet

    SqlDataAdapter adapterSql = new SqlDataAdapter(cmdSql);
    DataSet dataSet = new DataSet();
    adapterSql.Fill(dataSet, "Table");

    4、显示数据给用户(DataGridView控件)

      通过设置DataGridView控件的DataSource属性为DataSet的表格数据,使其显示数据表中的数据。

    DataTable dataTable = new DataTable();
    dataTable = dataSet.Tables["Table"];
    dataGridView1.DataSource = dataTable;

    附:

      C#连接MS Access 2010的简单操作

    string strConn = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source='{0}AccessTest.accdb'", Application.StartupPath);
    OleDbConnection connOle = new OleDbConnection(strConn);
    OleDbDataAdapter adapterOle = new OleDbDataAdapter("select * from Tb_GHC", connOle);
    DataSet ds = new DataSet();
    adapterOle.Fill(ds, "Tb_GHC");
    this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
    connOle.Close();
    connOle.Dispose();

      可以看出,C#连接SQL Server 2008和MS Access 2010数据库的操作类似,都是基于ADO .Net技术,ADO .Net架构如下图所示:

      

    参考链接:

      http://blog.csdn.net/wangdingqiaoit/article/details/8673926

  • 相关阅读:
    主流ORM对比分析,莫人云亦云
    避免远程调用中固有的滞后时间问题的最佳方法是进行更少的调用,并让每个调用传递更多的数据。
    挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
    项目成本管理记忆口诀:
    总是差和自由时差
    成本基线
    php htmlentities函数的问题
    .NET简谈事务、分布式事务处理
    Startup配置类 居然又是约定
    项目管理的九大只是领域输入,工具和输出
  • 原文地址:https://www.cnblogs.com/gaohongchen01/p/4789975.html
Copyright © 2011-2022 走看看