C# 连接数据库
一、SQL SERVER 连接字符串语法:
1、SQL SERVER验证(两种写法)(安全连接)
string connStr = "Data Source=.;Initial Catalog=DatabaseName;User Id=sa;Password=123"; 或 string connStr = "server=.;database=DatabaseName;uid=sa;pwd=123";
即:Data Source <=> server
Initial Catalog <=> database
User Id <=> uid
Password <=> pwd
2、windows验证(可信连接)
string connStr = "Data Source=.;Initial Catalog=DatabaseName;Integrated Security=SSPI"; 或 string connStr = "Data Source=.;Initial Catalog=DatabaseName;Integrated Security=True"; 或 string connStr = "Data Source=.;Initial Catalog=DatabaseName;Trusted_Connection=True";
注:如果服务器是本地,可以用 local 或 .(一个点) 表示,如果是远程服务器,则用 IP,端口 表示。
连接字符串中的键值对不区分大小写。
二、配置文件中存储方式
可以把连接字符串保存到配置文件中(App.config)
1、配置到<connectionStrings>节点中(推荐):
<add name="connStr" connectionString="server=.;database=test;uid=sa;pwd=123;" providerName="System.Data.SqlClient"/>
2、也可以配置到<appSettings>节点:
<add key="connStr" value="server=.;database=test;uid=sa;pwd=123;"/>
读取配置文件中的连接字符串
1、首先,在项目下的“引用”中,点击右键——添加引用,添加:System.Configuration。
2、在程序最上面,添加:using System.Configuration;
3、读取连接字符串:
conn.ConnectionString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//<ConnectionStrings>节点中读取方法 conn.ConnectionString = ConfigurationManager.AppSettings["connStr"].ToString();//<AppSettings>节点中读取方法
连接对象的创建
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //创建连接对象的第一种方式(推荐) SqlConnection conn = new SqlConnection(connStr); //创建连接对象的第二种方式 SqlConnection conn = new SqlConnection(); conn.ConnectionString = connStr;
使用using来释放对象
//SqlConnection继承于IDisposeable接口,可以使用using 来释放对象 SqlConnection conn = null; using (conn = new SqlConnection(connStr)) { //代码 } Console.WriteLine(conn.State);//Closed
加密/解密配置文件:
Configuration config = ConfigurationManager.OpenExeConfiguration("ConsoleApp10.exe"); //ConsoleApp10.exe为应用程序名称 ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection; if (section.SectionInformation.IsProtected) { // Remove encryption. section.SectionInformation.UnprotectSection(); } else { // Encrypt the section. section.SectionInformation.ProtectSection( "DataProtectionConfigurationProvider"); } // Save the current configuration. config.Save();
三、运行时间测定(Stopwatch)
Stopwatch sw = new Stopwatch(); sw.Start(); //测试代码 sw.Stop(); Console.WriteLine($"运行时间:{sw.ElapsedMilliseconds}ms");
四、SqlCommand
Sq1Command介绍
重要属性:
Connection:SqlCommand对象使用的SqlConnection
CommandText:获取或设置要执行的T-SQL语句或存储过程名
CommandType:CommandType.Text--执行的是一个Sql语向
CommandType.StoredProcedure--执行的是一个存储过程
Parameters:SqlCommand对象的命令参数集合 默认空集合
Transaction:获取或设置要在其中执行的事务
创建(推荐使用第三种):
//1. SqlCommand cmd=newSqlCormand(); cmd.Connection=conn; cmd.CommandText=sql; //cmd.ConmandType=CommandTypeText;没有必要的 //cmd.ConmandType=CommandTypeStoredProcedure;//如果是存储过程,必须设置
//2. SqlCommandcmd1=new SqlCommand(sql); cmd1Connection=conn;
//3.sql语句 连接对象 推荐的 SqlCommand cmd2=newSqlConmand(sql,conn); //4.Connection对象 SqlCommandcmd3=connCreateConmand); cmd3ConmandText=sql; //5.事务 string delSql="deletefrom UserInfos whereUserId>3"; //SqlCommand cmd4=newSqlCommand(delSql,conn,null);
五、SqlParameter
常用属性
DbType 参数的SqlDbType(数据类型数据库的类型而言)
Direction参数的类型:输入输出输入输出、返回值参数
ParameterName 参数的名称
Size 最大大小 字节为单位
Value参数的值
SqlValue作为SQL类型的参数的值
构造方法
1.参数
SqlParameter pral=new SqlParameter();
pral.ParameterName="@userName";//参数名
pra1.Sq1DbType=Sq1DbType.VarChar//数据类型
pra1.Value ="admin”;//参数值
pral.Size =20;//大小
2.参数名,值
SqlParameter para2=new SqlParameter("@Age",24);
3.参数名 SqlDbType
SqlParameter para3=new SqlParameter("@DeptId",SqlDbType.Int);
para3.Size =4;
para3.Value=3;
4.参数名 类型 大小
SqlParameter para4 =new SqlParameter("@UserPwd",SqlDbType.VarChar. 50);
para4.Value="123456”
5参数名称 类型 大小 源列名(对应DataTable中的列名)
SqlParameter para5 =new SqlParameter(“@UserName”,SqlDbType.VarChar,20.
"UName”);
SqlConmand cmd=new SqlConmand();
SqlDataReader介绍
定义:提供一种从SQLServer数据库中读取只进的行流的方式。
特点 快速的、轻量级,只读的,谝历访问每一行数据的数据流,向一个方向,一行一行的,不能
向后读取,不能修改数据。
缺点:不灵活,只适合数据小的情况,读取数据,一直占用连接
读取方式:Read()获取第一行的数据,再次调用Read()方法,
当调用Read()方法返回False时,就表示不再有数据行。
注意:
连接对象一直保持Open状态,如果连接关闭,是不能读取数据的。使用完成过后,应该马上调
用close()关闭,不然Reader对象会一直占用连接的。
创建方式:是不能直接构造的,cmd.ExecuteReader()来创建。cmd.ExecuteReader
(CommandBehaviour.CloseConnection)---好处:关团reader对象时,就会自动关闭连接。
读取时尽量使用与数据库字段类型相匹配的方法来取得对应的值,会减少因类型不一致而增加
类型转换操作性能损耗。
没有读取到末尾就要关闭reader对象时,先调用cmdCancel(),然后再调用reader.Close().
cmd.ExecuteReader()获取存储过程的返回值或输出参数,先调用readerClose(),然后才能
获取参数的值。
常用属性:
Conection:获取与Reader对象相关的SqlConnection
FiedCount:当前行中的列数。
HasRows:reader是否包含一行还是多行。
IsClosedreader对象是否已关闭 true / false
Item[int]:列序号,给定列序号的情况,获取指定列的值dr[1] object
Item[String]列名,获取指定列的值