• 欢迎访问交通人网站!
  • 分享一款小游戏:信任的进化
  •    发表于9年前 (2016-03-02)  热点资讯 |   抢沙发  1797 
    文章评分 1 次,平均分 4.0

    概述

    一般来说,数据库操作可以分为以下三个步骤:

    • 使用SqlConnection对象连接数据库;
    • 建立SqlCommand对象,负责SQL语句的执行和存储过程的调用;
    • 对SQL或存储过程执行后返回的结果进行操作。

    连接数据库

    连接字符串

    string sqlConnString = @"Data Source=服务器;Initial Catalog=数据库;Integrated Security=True";

    SqlConnection对象

    SqlConnection sqlConn = new SqlConnection(sqlConnString);
    sqlConn.Open();//打开对象
    //...//数据库操作
    sqlConn.Close();//使用完成后,需要及时关闭

    ConnectionState

    无法确定是否已经正常关闭时,可以使用sqlConn.State来检测:

    sqlConn.State==System.Data.ConnectionState.Closed;//True,关闭
    sqlConn.State==System.Data.ConnectionState.Open;//True,开启

    读取数据

    两种方法:一种是用SqlDataReader直接一行一行的读取数据集,另一种是使用SqlDataAdapter将数据读取到本地DataSet。

    SqlDataReader时刻与远程数据库服务器保持连接,将远程的数据通过“流”的形式单向传输给客户端,它是“只读”的。由于是直接访问数据库,所以效率较高,但使用起来不方便。

    DataSet一次性从数据源获取数据到本地,并在本地建立一个微型数据库(包含表、行、列、规则、表之间的关系等),期间可以断开与服务器的连接,使用SqlDataAdapter对象操作“本地微型数据库”,结束后通过SqlDataAdapter一次性更新到远程数据库服务器。这种方式使用起来更方便简单,但性能稍逊于SqlDataReader。

    SqlDataReader逐行读取

    SqlCommand sqlCmd= new SqlCommand();
    sqlCmd.Connection = sqlConn;
    sqlCmd.CommandType = CommandType.Text;
    sqlCmd.CommandText ="SELECT* FROM [名单]";
    SqlDataReader sqlReader = sqlCmd.ExecuteReader(); //执行SQL,返回一个“流”
    while (sqlReader.Read())
    {
    Console.Write(sqlReader["姓名"]); // 打印出每个学生的姓名
    }

    SqlDataAdapter读取至DataSet

    string sqlCmdString ="SELECT* FROM [名单]";//查询语句
    SqlDataAdapter sqlAdadp = new SqlDataAdapter();
    SqlCommand sqlCmd = new SqlCommand(sqlCmdString, sqlConn);
    //sqlCmd.CommandTimeout = 1000;//超时时间设置
    sqlAdadp.SelectCommand = sqlCmd;
    DataSet ds = new DataSet();
    sqlAdadp.Fill(ds, "student");
    DataTable dt = ds.Tables[0];

    或者:

    string sqlCmdString = "SELECT * FROM [名单]";//查询语句
    SqlDataAdapter sqlAdadp = new SqlDataAdapter(sqlCmdString, sqlConn);
    //sqlAdadp.SelectCommand.CommandTimeout = 1000;
    DataSet ds = new DataSet();
    sqlAdadp.Fill(ds, "student");
    DataTable dt = ds.Tables[0];

    对于DataSet/DataTable的基本操作,详见《C#:DataTable的基本操作》。

    批量写数据:SqlBulkCopy

    SqlBulkCopy可以将一个DataTable对象批量插入到指定名称的数据表中。比如:

    SqlBulkCopy bcp = new SqlBulkCopy(sqlConn);
    bcp.DestinationTableName = "名单";//数据库中的目标表
    //注意:DataTable的架构必须和数据库表完全一样,包括列的名称、顺序,且不允许间隔。
    //如果表结构不一致,需要通过以下方法指定列与列之间的对应关系
    bcp.ColumnMappings.Add("学号", "学号");
    bcp.ColumnMappings.Add("姓名", "姓名");
    bcp.ColumnMappings.Add("年龄", "年龄");
    bcp.ColumnMappings.Add("年级", "年级");
    //bcp.BatchSize = 5000;//每次写入的条数
    //bcp.BulkCopyTimeout =1000;//超时时间设置,默认30秒
    bcp.WriteToServer(student);//DataTable student

    SqlCommand

    SqlCommand对象用于执行数据库操作。

    常用方法

    • sqlCmd.ExecuteNonQuery(): 返回受影响函数,如增、删、改操作;
    • sqlCmd.ExecuteScalar():执行查询,返回首行首列的结果;
    • sqlCmd.ExecuteReader():返回一个数据流(SqlDataReader对象)。

    常用操作

    ① 执行SQL

    SqlCommand sqlCmd= sqlConn.CreateCommand(); //创建SqlCommand对象
    sqlCmd.CommandType = CommandType.Text;
    sqlCmd.CommandText = "select * from products = @ID"; //sql语句
    sqlCmd.Parameters.Add("@ID", SqlDbType.Int);
    sqlCmd.Parameters["@ID"].Value = 1; //给参数sql语句的参数赋值

    ② 调用存储过程

    SqlCommand sqlCmd= sqlConn.CreateCommand();
    sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
    sqlCmd.CommandText = "存储过程名";

    ③ 整张表

    SqlCommand sqlCmd= conn.CreateCommand();
    sqlCmd.CommandType = System.Data.CommandType.TableDirect;
    sqlCmd.CommandText = "表名"

    示例:清空表中数据

    sqlCmdString = "TRUNCATE TABLE [数据库].[dbo].[数据表]";//可以更换为任意合法的SQL语句
    sqlCmd = new SqlCommand(sqlCmdString, sqlConn);
    sqlCmd.CommandTimeout = sqlCmdTimeout;
    sqlCmd.ExecuteNonQuery();
     

    除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/csharp-sql-server/

    交通人博客是交通人工作室(JTR Studio)建立的交通人系列网站之一,是交通人工作室的主阵地,旨在整合和分享交通行业相关资讯,具体包括但不限于行业新闻、行业动态,以及行业相关规范、书籍、报告和软件等资源。

    发表评论

    表情 格式

    暂无评论

    
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享