一、ADO.Net之SqlConnection、SQLCommand知识思维导图
二、ADO.Net之SqlConnection
C#(ADO.NET)连接SQl数据库的方法:(using System.Data.SqlClient;)
连接数据库主要分以下3步:
①定义字符串。
我们可以使用Window身份验证和SQL Server身份验证2种方式连接到SQL Server数据库。
1).Window验证连接字符串如下:
Server=(Local);Database=EduBaseDemo;Integrated Security=sspi;
说明:Server表示运行SQL Server的服务器,(Local)表示本地连接,也可以使用服务器名。Database表示使用的数据库名,例子中所用的数据库为EduBaseDemo;Integrated Security为sspi表示使用集成的Window身份验证,也可以使用True和false来表示,这里sspi等价True。由于习惯我们统一使用sspi。
2).使用SQL Server身份验证连接字符串如下(以学校机房局域网络为例):
Server=(SQL Server的服器名);Database=EduBaseDemo;IntegratedSecurity=false
;uid=jsj;pwd=2wsx@WSX;
说明:uid为指定的数据库用户名,pwd为之指定用户对应的密码;
②创建SqlConnection对象。
可以使用定义好的连接字符串创建SqlConnection对象,代码如下:
SqlConnection sqlConnection = new SqlConnection();
③打开数据库连接。
调用SqlConnection的Open()方法打开数据库,代码如下:
SqlConnection.Open();
注:数据库连接使用完毕,调用SqlConnection的Close ()方法关闭数据库
三、ADO.Net之SqlCommand
1、SqlCommand对象可以执行SQL语句完成对数据库的增、删、改、查等数据操作。
在SqlCommand类中,最主要的属性有CommandText,该属性用于接收要执行的SQL语句,例如:
SqlCommand.CommandText = "INSERT INTO b1(name, company, position, shijian) VALUES(@Name, @Company, @Position,@Datetime)";
除了CommandText属性,主要还有Connection属性,用来接收数据库连接,还有Transaction属性,用来接收事物。
从这段例子中,我们可以看到在插入数据时采用了“@”字符加参数名的格式,这是为了防止注入式攻击采用的参数化查询。参数化查询是访问数据库时,在需要填入数值或数据的地方,使用参数来给值。 在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。在ASP.NET程序中使用参数化查询 ,ASP.NET环境下的查询化查询也是通过Connection对象和Command对象完成。如果数据库是SQL Server,就可以用有名字的参数了,格式是“@”字符加上参数名。
2、其还有三个比较常用的方法:
第一个是ExecuteNonQuery()方法,主要用来提交无查询结果的SQL语句,如UPDATE,INSERT,DELETE等语句,其返回值为数据库中被SQL语句影响的行数;
第二个是ExecuteReader()方法,主要用来提交SELECT语句,返回值是一个数据流,里面是SELECT语句的查询结果,可以用SqlDataReader对象来接收,然后调用其Read()方法来逐行读出查询结果;
第三个是ExexuteScalar()方法,主要也是用来提交SELECT语句,但是其返回值是查询结果的第一行第一列,所以适用于例如COUNT等聚合查询。
四、加入异常处理
在进行数据库访问过程中常常会出现数据库服务器未开启或者连接中断等异常现象,.NET提供了try···catch···finally语句块进行异常处理。由于数据库必须显示关闭,所以我们可以把关闭数据库连接的语句放在finally中。
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";
try
{
sqlConnection.Open();
rowAffected = sqlCommand.ExecuteNonQuery();
}
catch (SqlException sqlEx)
{
if (sqlEx.Number == 2627)
{
message = "您注册的用户号已存在,请重新输入!";
}
else
{
message = "注册失败!";
}
}
finally
{
sqlConnection.Close();
}
通过sqlConnection.Open()语句打开SQL连接,调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数,通过catch语句捕捉SQL异常,并给出合适错误提示;若插入正确,给出正确提示。