数据库简单操作
、本文主要介绍数据库的一些基本操作和C#与数据库之间的一般操作,用于简单的应用。
1、关于如何新建一个数据库
--一般先指向要使用的数据库
use master
go
--判断当前要使用的数据库是否存在,不存在则创建。当然,一般开发时都有,以下操作最好不要用,否则等于删库
if exists (select * from sysdatabases where name='DB_TEST')
drop database DB_TEST-- 删除数据库
go
--创建数据库
create database DB_TEST
on primary
(
--数据库文件的逻辑名
name='DB_TEST_data',
--数据库物理文件名(绝对路径)
filename='D:\SQL\DB_TEST_data.mdf',
--数据库文件初始大小,这个需要考虑每次增长量,否则会影响之后的磁盘碎片和日志大小
size=200MB
--数据文件增长量
filegrowth=1MB
)
--创建日志文件
log on
(
name ='C:\SQL\DB_TEST_data_log.ldf',
size=5MB,
filegrowth=1MB
)
2、在创建的数据库下新建表格
use DB_TEST
GO
--以下最好不要有
if exists (select * from sysobjects where name='DB_TEST')
drop table DB_TEST_Table
go
--创建表
create table DB_TEST_Table
(
id int identity(1,1),
sn int not null,
volt float null,
temp int not null,
person varchar(20) not null
)
3、在表中插入数据——增加
use TEST_DB
go
insert into DB_TEST_Table(id,sn,volt,temp,person) values(1,2,3.4,25,zzz)
insert into DB_TEST_Table(id,sn,volt,temp,person) values(2,3,3.5,25,zzl)
insert into DB_TEST_Table(id,sn,volt,temp,person) values(3,45,5.6,24,zzr)
insert into DB_TEST_Table(id,sn,volt,temp,person) values(4,23,4.0,24,zzf)
4、数据表的数据删除
--删除整个表
delete xxx--xx为表名
--删除表中数据---单个
delete from DB_TEST where id =1
--删除表中多个数据
delete from DB_TEST where volt >3.5
delete from DB_TEST where volt in(1,3.5)
5、数据表的数据修改
--更新表中数据
update DB_TEST set person='jasmon' where id=2
6、数据表的数据查询
主要就是select选择,然后就是from从哪一个表中查找,where来限制查找条件。或者说通过比较运算符来进行条件运算
----基本查询
--选择所有列
select * from DB_TEST
--查询结果集合中的数据的排列顺序与选择列表中所指定的列名排列顺序相同
select id,person from DB_TEST
--更改列标题
select 使用人=person,SN码=sn from DB_TEST
--限制返回的行数,TOP N,或者 top n percent
select top 22 * from DB_TEST
--根据升序降序排列
order by asc order by desc
------------------------------------------
----联合查询,对于一张表来进行查询,或者说对多张表查询后联合成一张表
select stuid,studentname,stugender,stuage from Student
select empid,empname,empgender,empage from Student
--使用该方法返回的结果集的列名总是返回第一个select语句中的列名
--union all ,将每个表数据联合成一张表,不会去除重复对象,而是直接添加在仪器
select 列名 (可以多个列) from 表名 union all select 列名(可多个)from 表名2
------------------------------------------
---连接查询,
7、数据库的约束添加
--添加主键约束
alter table DB_TEST
add constraint pk_id primary key (id)
--创建检查约束
alter table DB_TEST
ADD CONSTRAINT ck_temp check (temp bewteen 1 and 4)
--创建唯一约束
alter table DB_TEST
ADD constraint uq_sn unique(sn)
--创建长度约束
alter table DB_TEST
ADD CONSTRAINT CHECK (LEN(SN)=20)
--创建外键约束(一张表中的某个元素和另外一张表有关)
alter table Students
ADD CONSTRAINT FK_CLASSID FOREIGN KEY (CLASSID) REFERENCES StudentClass(CLASSID)
数据库与C#
8、数据库与C#的ADO.NET
8.1如何在c#下连接数据库sql-server
在app.config中添加配置文件如下——
<connectionStrings> <add name ="connString" connectionString ="Server=.;DataBase=SMDB;Uid=sa;Pwd=123456"/> </connectionStrings>
c#下写如下代码——
//定义连接字符串
private static readonly string connString =
ConfigurationManager.ConnectionStrings["connString"].ToString();
//建立数据库的连接
public static void ConnSql(string sql)
{
SqlConnection conn=new SqlConnection(connString);
SqlCommand cmd= new SqlCommand(sql,conn);
try{
conn.Open();
}
catch(Exception ex){
throw ex;
}
finally{
conn.close();
}
}
8.2数据库的增删改查
数据库的更新——
//数据库的更新----CMD.ExecuteNonQuery()
public static int Update(string sql){
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
int result = cmd.ExecuteNonQuery();
return result;
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
数据库的单一结果的查询——返回的是一个对象
//单一结果查询——ExecuteScalar()
public static object GetSingleResult(string sql){
SqlConnection conn= new SqlConnection(connString);
SqlCommand cmd=new SqlCommand(sql,conn);
try
{
conn.Open();
object result = cmd.ExecuteScalar();
return result;
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
数据库的多结果查询——返回的是一个SqlDataReader对象,有查询到时不为null
//主要是SqlDataReader对象接收ExecuteReader返回的(CommandBehavior值生成的SqlDataReader对象),ExecuteReader尽可能对数据库进行查询,并返回结果,但是不会关闭掉读取器,所以需要在查询完结果之后对reader行为进行关闭。
public static SqlDataReader GetReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
SqlDataReader objReader =
cmd.ExecuteReader(CommandBehavior.CloseConnection);
return objReader;
}
catch (Exception ex)
{
conn.Close();
throw ex;
}
}
返回数据集的查询——
//这里说明了DataSet中与SQL的桥梁作用,其中扮演该角色的时SqlDataAdapter
public static DataSet GetDataSet(string sql){
SqlConnection conn= new SqlConnection(connString);
SqlCommand cmd=new SqlCommand(sql,conn);
SqlDataAdapter da=new SqlDataAdapter(cmd);//创建数据适配器对象
DataSet ds=new DataSet();//内存数据集
try{
conn.Open();
da.Fill(ds);//使用数据适配器填充数据
return ds;//返回数据集
}
catch(Exception ex){
throw ex;
}
finally{
conn.Close();
}
为了让我们对于sql的操作更具备安全性和可靠性,我们有时候需要有事务来解决当有的逻辑执行过程中,一些意外因素导致逻辑执行不完全而出现问题——即事务就是为了解决这一个问题——某些操作要么全部发生,要么全部不发生,不能发生一些,这就是数据库的第一个特性——原子性;
因此这里有用事务的方法提交sql语句进行查询的方法——
public static bool UpdateByTransaction(List<string> sqlList){
//先进行数据库的连接——并架起SqlCommand这个C#与SQL的桥梁
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;//表示获取或设置要在sqlCommand中进行SqlConnection,将连接的对象CONN给到此中
try
{
conn.Open();//连接
cmd.Transaction = conn.BeginTransaction(); //前者是表示在sqlCommand中执行事务SqlTransatcion,后者表示要开启数据库的事务。当开启之后,只要在cmd中加入要执行的sql语句即可,当执行不完全时,不会提交。
foreach (string itemSql in sqlList)//循环提交SQL语句
{
cmd.CommandText = itemSql;
cmd.ExecuteNonQuery();
}
cmd.Transaction.Commit(); //提交事务(同时自动清除事务)
return true;
}
catch (Exception ex)
{
if (cmd.Transaction != null)
cmd.Transaction.Rollback();//回滚事务(同时自动清除事务)
throw new Exception("调用事务方法UpdateByTran(List<string> sqlList)时出现错误:" + ex.Message);
}
finally
{
if (cmd.Transaction != null)
cmd.Transaction = null;
conn.Close();
}
}
后续会补充LINQ查询以及带参数的SQL语句的内容。