Sql Server安装默认新建四个系统数据库
- Master数据库:Master数据库是Sql Server中最终要的数据库它记录Sql Server实例的所有系统及信息。包括实例范围的元数据、端点、链接服务器和系统配置设置
- Tempdb数据库:tempdb是一个临时数据库,用于保存临时对象或中间结果集
- Model数据库:用作SQLServer实例上创建的所有数据库的模板。对Model数据库进行的修改(如数据库大小、排序规则、恢复模式和其他数据库选项)将应用于以后创建的所有数据库
- msdb库:用于SQL Server代理计划警报和作业
文件分为三种类型:
Varchar(size):保存可变长度的字符串(可包含字母、数字及特殊字符)在括号中指定字符串的最大长度。对多255个字符。注释:如果值的长度大于255,则被转换为Text类型。
char(10):标识固定长度为10个字符,如果不足,就以空格填充
varchar(10):标识长度最大为10的可变字符,不足不填充。(var——variable可变)
存储方式:navarchar——字符存储, varchar字节存储
存储量:varchar比较节省控件,因为存储大小为字节的世界长度,而nvarchar是双字节存储。
使用:如果存储内容都是英文字符而没有孩子等其他语言符号,建议使用varchar;含有汉字的使用nvarchar,因为nvarchar是使用Unicode变慢,既同一的字符编码标准,会较少乱码的出现几率;(如果你做的项目可能设计不同语言之间的转换,建议用nvarchar)
--SQL语句注释以(--)开头
--SQL创建数据库
create database mydarlydb001
create database mydarly002
--删除数据库
drop database mydarlydb001
--创建数据表(创建表示,必须同时创建字段)
create table darlytable
(
id int, --字段
name nvarchar(5),
pwd nvarchar(20)
)
--删除表
drop table darlytable
--在指定的数据库中创建表(默认将表创建在master数据库中,master是主表,sql默认进入主数据库)
--需要在特定数据库中创建表,首先要切换到相应数据库中
use mydarly002 --切换
create table darlytable --切换后再次新建表,就会在切换到的数据库下建表
(
id int, --字段
name nvarchar(5),
pwd nvarchar(20)
)
--指定主键
create table darlytable002
(
id int identity(1,1) primary key,
name nvarchar(5),
pwd nvarchar(20)
)
--创建数据表并插入数据
create table darlytable003
(
id int identity(1,1) primary key,
name nvarchar(5),
gender nvarchar(1),
age int,
jointime date,
department nvarchar(8)
)
--向表中添加对应的数据
insert darlytable003
(name,gender,age,jointime,department)
values('张三','男',20,'2022-02-20','研发部')
insert darlytable003
(name,gender,age,jointime,department)
values('李四','女',19,'2022-02-20','测试部')
--更改表中数据
update darlytable003 set department='销售部' where name='李四'
update darlytable003 set name='王五' where id=3
--更给表中数据,不添加where则是更改表中所有对应字段
update darlytable003 set jointime='1990-12-01'
--查询语句select
--查询表中全部数据
select * from darlytable003
select * from darlytable003 where age>=20
select * from darlytable003 where gender='男'
create table darly004
(
u_id int,
name nvarchar(5),
username nvarchar(10)
)
insert darly004(u_id,name,username)values(1,'张三','zhsan908')
insert darly004(u_id,name,username)values(2,'王五','wangwu902')
insert darly004(u_id,name,username)values(3,'李四','lisi901')
--简化联合查询
select * from darly004,darlytable003 where darlytable003.id=darly004.u_id
--删除记录
delete darlytable003 where gender='男'
--清除所有内容
delete darlytable003
当调试数据库里的存储过程时提示”Windows防火墙当前阻止了远程调试”.
解决方案:Windows防火墙阻止了远程调试
也可以直接选择第三项——确定然后执行sql语句
为了方位数据库,就要提供数据库连接类,在C#中,是通过Connection类来实现的。它有四种类型的链接方式
创建连接SQL Server数据库的字符一般有两种
- 一种以SQL验证登录
- 另一种是以Windows身份验证
- 为了节省系统资源,提高系统性能,最好使用完数据库后就要关闭连接。
- 在C#语言由于GC(垃圾回收机制——garbage collection)的存在,会在未来某个时刻释放资源,它是非决定性的,并不能确定这个过程在什么时候发生当顽疾关闭数据时,可通过USING语句确保对象在退出时,立即被释放,从而达到关闭数据库的作用。
- using语句不仅大提高了性能,而且还达到关闭数据库的功能。还有一种通过try。。。catch 。。。。finally语句控制链接数据库的关闭来提高性能
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace 链接和关闭数据库
{
class Program
{
static void Main(string[] args)
{
//数据库(SQL Sever)的连接方式分为两种:SQL Server验证 windows身份验证
// 1、windows身份验证登录并打开数据 Server
string constr = "Server=.; integrated security=SSPI; Initial Catalog=csharpzx";
//server=可以写计算机名称 ip地址、Localhost或.都可以
//integrated security=SSPI; 安全声明
//Intitial Catalog=csharpzx 初始化数据库
SqlConnection mysqlCon = new SqlConnection(constr);
mysqlCon.Open();
Console.WriteLine("第一种方式成功打开数据库");
//直接关闭数据库,但此种方式可能不是关闭数据库的最佳时间(后续有可能还会用到数据库,)
mysqlCon.Close();
Console.WriteLine("第一种方式打开的数据库被关闭");
Console.ReadKey();
//SQL验证登录
string constr2 = "Server=.; user=sa;pwd=darly;database=csharpzx";
SqlConnection mysqlCon2 = new SqlConnection(constr2);
//mysqlCon2.Open();
//Console.WriteLine("第二种方式成功打开数据库");
//通过using语句实现数据库关闭
using (mysqlCon2) //使用完数据库后自动关闭数据库
{
mysqlCon2.Open();
Console.WriteLine("第二种方式成功打开数据库");
}
//通过try。。。catch。。finally。。。实现数据库的实时关闭
try
{
mysqlCon2.Open();
Console.WriteLine("try catch finally 打开关闭数据库");
}
catch (Exception)
{
throw;
}
finally
{
mysqlCon2.Close();
Console.WriteLine("数据库成功关闭");
}
//using与try...Catch finally
try
{
using (mysqlCon2)
{
mysqlCon2.Open();
Console.WriteLine("using与try...Catch finally打开数据库成功");
}
}
catch (Exception)
{
throw;
}
finally
{
mysqlCon2.Close();
}
Console.ReadKey();
}
}
}
- CommandText:要下大值数据源的命令
- CommandTimeout:出错时等待时间
using System;
using System.Data.SqlClient;
namespace Command操作数句
{
class Program
{
static void Main(string[] args)
{
string myconstr = "Server=.; user=sa; pwd=darly; database=csharpzx";
SqlConnection myCon = new SqlConnection(myconstr);
try
{
myCon.Open();
string sql = "select * from mytable";
SqlCommand mycom = new SqlCommand(sql, myCon); //创建Command对象,第一个参数就是sql语句,第二个对象是Connection对象
mycom.CommandTimeout = 2; //设置的时间(2秒)内没有链接成功,则判定失败
Console.WriteLine("创建对象成功");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
myCon.Close();
}
Console.ReadKey();
}
}
}
using System;
using System.Data.SqlClient;
namespace Command操作数句
{
class Program
{
static void Main(string[] args)
{
string myconstr = "Server=.; user=sa; pwd=darly; database=csharpzx";
SqlConnection myCon = new SqlConnection(myconstr);
try
{
//创建Command对象过程
//myCon.Open();
//string sql = "select * from mytable";
//SqlCommand mycom = new SqlCommand(sql, myCon); //创建Command对象,第一个参数就是sql语句,第二个对象是Connection对象
//mycom.CommandTimeout = 2; //设置的时间(2秒)内没有链接成功,则判定失败
//Console.WriteLine("创建对象成功");
//更改数据,ExecuteNonQuery()
//myCon.Open();
string sql2 = "insert mytalbe(id,name,gender,age,department)Values('7','小六子','男','6','天才部') ";
//string sql2 = "insert mytable(id,name,gender,age,department)Values(8,'店小二','男',6,'餐饮部') ";
//SqlCommand mycom2 = new SqlCommand(sql2, myCon);
//mycom2.ExecuteNonQuery();
//Console.WriteLine("完成插入");
//ExecuteScalar
myCon.Open();
string sql = "select max(age) from mytable";
SqlCommand myCom = new SqlCommand(sql, myCon);
int t = 0;
t = (int)myCom.ExecuteScalar();
Console.WriteLine("年龄最大的是"+t+"岁");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
myCon.Close();
}
Console.ReadKey();
}
}
}
using System;
using System.Data.SqlClient;
namespace DAtaReader
{
class Program
{
static void Main(string[] args)
{
string constr = "server=.;user=sa;pwd=darly;database=csharpzx";
SqlConnection mycon = new SqlConnection(constr);
try
{
mycon.Open();
string sql = "select * from mytable";
SqlCommand mycom = new SqlCommand(sql, mycon);
//声明dataReader对象
SqlDataReader mydr = mycom.ExecuteReader();
if (mydr.HasRows) //判断表中是否有数据 hasRows为true表示表中有数据,false为无数据
{
Console.WriteLine("表中存在数据");
}
else
{
Console.WriteLine("表中不存在任何数据");
}
Console.WriteLine(mydr.FieldCount); //检查表中共有几个字段
Console.WriteLine(mydr.IsClosed); //输出数据库是否开启,true为打开状态,false为关闭状态
mydr.Close();
Console.WriteLine(mydr.IsClosed);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
mycon.Close();
}
Console.ReadKey();
}
}
}
using System;
using System.Data.SqlClient;
namespace DAtaReader
{
class Program
{
static void Main(string[] args)
{
string constr = "server=.;user=sa;pwd=darly;database=csharpzx";
SqlConnection mycon = new SqlConnection(constr);
try
{
mycon.Open();
//string sql = "select * from mytable";
//SqlCommand mycom = new SqlCommand(sql, mycon);
声明dataReader对象
//SqlDataReader mydr = mycom.ExecuteReader();
//if (mydr.HasRows) //判断表中是否有数据 hasRows为true表示表中有数据,false为无数据
//{
// Console.WriteLine("表中存在数据");
//}
//else
//{
// Console.WriteLine("表中不存在任何数据");
//}
//Console.WriteLine("表中共有"+mydr.FieldCount+"字段"); //检查表中共有几个字段
//Console.WriteLine("第四列字段的类型:"+mydr.GetDataTypeName(3)); //获取指定列的名称类型,
//Console.WriteLine("第三列字段名称:"+mydr.GetName(2)); //获取指定字段的字段名称
//string mystr1 = "age";
//Console.WriteLine("字段age处于第"+(mydr.GetOrdinal(mystr1)+1)+"列"); //获取指定字段名称在记录中的顺序
//Console.WriteLine(mydr.GetOrdinal("age")+1);
GetValue
//string sql2 = "select * from mytable where id=2";
//SqlCommand mycom2 = new SqlCommand(sql2, mycon);
//SqlDataReader mydr2 = mycom2.ExecuteReader();
//if(mydr2.Read()) //首先判断是否读取到数据,否则直接用GetValue无法获取到值
// Console.WriteLine(mydr2.GetValue(1)); //通过sql语句查询到了一条记录是一个一维数组
//GetValues
string sql3 = "select * from mytable";
SqlCommand mycom3 = new SqlCommand(sql3, mycon);
SqlDataReader mydr3 = mycom3.ExecuteReader();
object[] myobj = new object[mydr3.FieldCount];
//while (mydr3.Read())
//{
// mydr3.GetValues(myobj);
// foreach (object outobect in myobj) Console.Write(outobect + "\t");
// Console.WriteLine(mydr3.Read());
//}
//Read()
Console.WriteLine("Read读取下一条数据,循环一次后,read自动移到下一条");
while (mydr3.Read())
{
Console.Write(mydr3[0].ToString()+",");
Console.Write(mydr3[1].ToString() + ",");
Console.Write(mydr3["gender"].ToString() + ","); //访问DataReader对象时,使用索引比使用字段访问速度要快
Console.WriteLine();
}
//IsClosed
Console.WriteLine(mydr3.IsClosed); //输出数据库是否开启,true为打开状态,false为关闭状态
mycon.Close();
Console.WriteLine(mydr3.IsClosed);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
mycon.Close();
}
Console.ReadKey();
}
}
}
using System;
using System.Data;
namespace DataSet数据集
{
class Program
{
static void Main(string[] args)
{
DataSet mydataset = new DataSet("数据集练习"); //参数为自定义的数据集名称
DataTable mytable = new DataTable("mytable001"); // 参数为自定义DataTable名称
mydataset.Tables.Add(mytable); // 将DataTable添加到DataSet中
DataColumn mycol1 = new DataColumn("id", Type.GetType("System.INt32")); //第一个参数为字段名称,第二个参数为字段类型(通过获取系统中数据类型设置)
DataColumn mycol2 = new DataColumn("name", Type.GetType("System.String"));
DataColumn mycol3 = new DataColumn("department", Type.GetType("System.String"));
DataColumn mycol4 = new DataColumn("gender", Type.GetType("System.Char"));
DataColumn mycol5 = new DataColumn("age", Type.GetType("System.Int32"));
mytable.Columns.Add(mycol1);
mytable.Columns.Add(mycol2);
mytable.Columns.Add(mycol3);
mytable.Columns.Add(mycol4);
mytable.Columns.Add(mycol5);
string[,] mydata = { { "张三", "测试部", "男", "18" }, { "李四", "公关部", "女", "18" }, { "王五", "研发部", "男", "28" } };
for (int i = 0; i < mydata.Length/4; i++)
{
DataRow myRow = mytable.NewRow(); //声明一个新行
//向新行中添加数据
myRow[0] = i;
myRow["name"] = mydata[i, 0]; //行中添加数据用字段名或索引值都可以
myRow[2] = mydata[i, 1];
myRow[3] = mydata[i, 2];
myRow["age"] = mydata[i, 3];
mytable.Rows.Add(myRow); //将行添加到表中
}
mydataset.AcceptChanges(); //数据集接受更改,相当于将修改数据保存
}
}
}
using System;
using System.Data;
namespace DataSet数据集
{
class Program
{
static void Main(string[] args)
{
DataSet mydataset = new DataSet("数据集练习"); //参数为自定义的数据集名称
DataTable mytable = new DataTable("mytable001"); // 参数为自定义DataTable名称
mydataset.Tables.Add(mytable); // 将DataTable添加到DataSet中
DataColumn mycol1 = new DataColumn("id", Type.GetType("System.Int32")); //第一个参数为字段名称,第二个参数为字段类型(通过获取系统中数据类型设置)
DataColumn mycol2 = new DataColumn("name", Type.GetType("System.String"));
DataColumn mycol3 = new DataColumn("department", Type.GetType("System.String"));
DataColumn mycol4 = new DataColumn("gender", Type.GetType("System.Char"));
DataColumn mycol5 = new DataColumn("age", Type.GetType("System.Int32"));
mytable.Columns.Add(mycol1);
mytable.Columns.Add(mycol2);
mytable.Columns.Add(mycol3);
mytable.Columns.Add(mycol4);
mytable.Columns.Add(mycol5);
string[,] mydata = { { "张三", "测试部", "男", "18" }, { "李四", "公关部", "女", "18" }, { "王五", "研发部", "男", "28" } };
for (int i = 0; i < mydata.Length/4; i++)
{
DataRow myRow = mytable.NewRow(); //声明一个新行
//向新行中添加数据
myRow[0] = i+1;
myRow["name"] = mydata[i, 0]; //行中添加数据用字段名或索引值都可以
myRow[2] = mydata[i, 1];
myRow[3] = mydata[i, 2];
myRow["age"] = mydata[i, 3];
mytable.Rows.Add(myRow); //将行添加到表中
}
mydataset.AcceptChanges(); //数据集接受更改,相当于将修改数据保存
Console.WriteLine("更改前的数据");
outValues(mydataset);
//clon及Merge
DataTable mydt002 = mytable.Clone();
DataRow mydataRow2 = mydt002.NewRow();
mydt002.Rows.Add(new object[] { 5, "赵六", "研发部", "男", "38" });
mydt002.Rows.Add(new object[] { 6, "王二", "研发部", "男", "38" });
mydataset.Merge(mydt002); //将mydt002及其架构合并到数据集中
Console.WriteLine("\n合并好的数据集");
outValues(mydataset);
//复制
DataSet myds001 = mydataset.Copy();
DataSet myds002 = mydataset.Clone();
Console.WriteLine("copy结果");
outValues(myds001);
Console.WriteLine("Clone结果");
outValues(myds002);
Console.Read();
}
public static void outValues(DataSet ds) //遍历dataSet
{
foreach (DataTable outtable in ds.Tables) //遍历数据集中的表
{
Console.WriteLine("表的名称"+outtable.TableName); //获取表的名称并输出
foreach (DataRow outdrow in outtable.Rows) //遍历行
{
foreach (DataColumn outcolum in outtable.Columns) //遍历列,相当于字段
{
Console.Write(outdrow[outcolum]+"\t");
}
Console.WriteLine();
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace DataAdapter数据适配
{
class Program
{
public static void outvalue(DataSet ds)
{
foreach (DataTable dt in ds.Tables)
{
Console.WriteLine("表名" + dt.TableName);
foreach (DataRow drow in dt.Rows)
{
foreach (DataColumn dcolumn in dt.Columns)
Console.WriteLine(dcolumn + "\t");
Console.WriteLine();
}
}
}
static void Main(string[] args)
{
string constr = "Server=.;user=sa;pwd=darly;database=csharpzx";
SqlConnection mycon = new SqlConnection(constr);
try
{
mycon.Open();
string sql = "Select * from mytable";
SqlDataAdapter myda = new SqlDataAdapter(sql, mycon);
DataSet myds = new DataSet();
myda.Fill(myds, "mytable"); //第一个参数是数据集名称,第二个参数是原表明
outvalue(myds);
Console.WriteLine("填充成功");
Console.Read();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
mycon.Close();
}
}
}
}
using System;
using System.Data;
using System.Data.SqlClient;
namespace DataAdapter数据适配
{
class Program
{
static void Main(string[] args)
{
string constr = "Server=.;user=sa;pwd=darly;database=csharpzx";
SqlConnection mycon = new SqlConnection(constr);
try
{
//mycon.Open();
//string sql = "Select * from mytable";
//SqlDataAdapter myda = new SqlDataAdapter(sql, mycon);
//DataSet myds = new DataSet();
//myda.Fill(myds, "mytable"); //第一个参数是数据集名称,第二个参数是原表明
//outvalue(myds);
//Console.WriteLine("填充成功");
//Console.Read();
//更改数据源文件
mycon.Open();
string updatesql = "updtae mytable set gender='女' where name='张三'";
SqlDataAdapter myda = new SqlDataAdapter("select * from mytable", mycon);
myda.UpdateCommand = new SqlCommand(updatesql, mycon);
DataSet myds = new DataSet();
myda.Fill(myds, "mytable"); //acceptchange处于true状态
Console.WriteLine("原dataSet对象内容");
outvalue(myds);
DataRow myrow = myds.Tables[0].Rows[0];
myrow["gender"] = "女";
myda.Update(myds, "mytable");
Console.WriteLine("更改后DataSet内容");
outvalue(myds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
mycon.Close();
}
Console.Read();
Console.ReadLine();
}
public static void outvalue(DataSet ds)
{
foreach (DataTable dt in ds.Tables)
{
Console.WriteLine("表名" + dt.TableName);
foreach (DataRow drow in dt.Rows)
{
foreach (DataColumn dcolumn in dt.Columns)
{
Console.Write(drow[dcolumn] + "\t");
}
Console.WriteLine();
}
}
}
}
}
利用SQL语句创建数据库Company,在其中创建一个clerk表,表中存放员工姓名,性别,年龄,入职时间,部门,然后向表中添加几条数据
通过DataReader打印所创建表的信息
通过DateSet打印所创建表的信息
--创建数据库
create database company
use company
create table clerk
(
id int identity(1,1) primary key,
name nvarchar(5),
gender nvarchar(1),
age int,
department nvarchar(10),
jointime date
)
--添加数据
insert Clerk(name,gender,age,department,jointime)Values('张三','男',35,'市场部','2022.02.26')
insert Clerk(name,gender,age,department,jointime)Values('李四','女',30,'测试部','2022.02.26')
insert Clerk(name,gender,age,department,jointime)Values('王五','男',34,'研发部','2022.02.26')
insert Clerk(name,gender,age,department,jointime)Values('赵六','女',20,'公关部','2022.02.26')
select * from clerk
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace 实例
{
class Program
{
static void Main(string[] args)
{
string constr = "Server=.;user=sa;pwd=darly;database=company";
SqlConnection mycon = new SqlConnection(constr);
try
{
mycon.Open();
string sql = "select * from clerk";
SqlCommand mycom = new SqlCommand(sql, mycon);
SqlDataReader mydr = mycom.ExecuteReader();
Console.WriteLine("使用DataReader打印输出");
for (int i = 0; i < mydr.FieldCount; i++)
{
Console.Write(mydr.GetName(i) + "\t");
}
Console.WriteLine();
while (mydr.Read())
{
for (int i = 0; i < mydr.FieldCount; i++)
{
Console.Write(mydr[i].ToString() + "\t");
}
Console.WriteLine();
}
mydr.Close();
Console.WriteLine("使用DataSet打印输出");
SqlDataAdapter myda = new SqlDataAdapter(sql, mycon);
DataSet myds = new DataSet();
myda.Fill(myds, "Clerk");
foreach (DataTable mytable in myds.Tables)
{
foreach (DataColumn col in mytable.Columns) Console.Write(col.ColumnName + "\t");
Console.WriteLine();
}
foreach (DataTable mytable in myds.Tables)
{
foreach (DataRow row in mytable.Rows)
{
foreach (DataColumn col in mytable.Columns) Console.Write(row[col] + "\t");
Console.WriteLine();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
mycon.Close();
}
Console.Read();
}
}
}