文章评分
次,平均分 :
[收起]
文章目录
概述
一般来说,数据库操作可以分为以下三个步骤:
- 使用SqlConnection对象连接数据库;
- 建立SqlCommand对象,负责SQL语句的执行和存储过程的调用;
- 对SQL或存储过程执行后返回的结果进行操作。
连接数据库
连接字符串
1 |
string sqlConnString = @"Data Source=服务器;Initial Catalog=数据库;Integrated Security=True"; |
SqlConnection对象
1 2 3 4 |
SqlConnection sqlConn = new SqlConnection(sqlConnString); sqlConn.Open();//打开对象 //...//数据库操作 sqlConn.Close();//使用完成后,需要及时关闭 |
ConnectionState
无法确定是否已经正常关闭时,可以使用sqlConn.State来检测:
1 2 |
sqlConn.State==System.Data.ConnectionState.Closed;//True,关闭 sqlConn.State==System.Data.ConnectionState.Open;//True,开启 |
读取数据
两种方法:一种是用SqlDataReader直接一行一行的读取数据集,另一种是使用SqlDataAdapter将数据读取到本地DataSet。
SqlDataReader时刻与远程数据库服务器保持连接,将远程的数据通过“流”的形式单向传输给客户端,它是“只读”的。由于是直接访问数据库,所以效率较高,但使用起来不方便。
DataSet一次性从数据源获取数据到本地,并在本地建立一个微型数据库(包含表、行、列、规则、表之间的关系等),期间可以断开与服务器的连接,使用SqlDataAdapter对象操作“本地微型数据库”,结束后通过SqlDataAdapter一次性更新到远程数据库服务器。这种方式使用起来更方便简单,但性能稍逊于SqlDataReader。
SqlDataReader逐行读取
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 8 |
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]; |
或者:
1 2 3 4 5 6 |
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对象批量插入到指定名称的数据表中。比如:
1 2 3 4 5 6 7 8 9 10 11 |
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
1 2 3 4 5 |
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语句的参数赋值 |
② 调用存储过程
1 2 3 |
SqlCommand sqlCmd= sqlConn.CreateCommand(); sqlCmd.CommandType = System.Data.CommandType.StoredProcedure; sqlCmd.CommandText = "存储过程名"; |
③ 整张表
1 2 3 |
SqlCommand sqlCmd= conn.CreateCommand(); sqlCmd.CommandType = System.Data.CommandType.TableDirect; sqlCmd.CommandText = "表名" |
示例:清空表中数据
1 2 3 4 |
sqlCmdString = "TRUNCATE TABLE [数据库].[dbo].[数据表]";//可以更换为任意合法的SQL语句 sqlCmd = new SqlCommand(sqlCmdString, sqlConn); sqlCmd.CommandTimeout = sqlCmdTimeout; sqlCmd.ExecuteNonQuery(); |
除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/csharp-sql-server/
暂无评论