黑马程序员_ado.net_连接sql server 总结

本文介绍了如何使用ADO.NET在Windows Phone 7应用程序中连接到SQL Server,包括连接字符串的设置、SqlConnection的使用、数据库操作如插入数据以及执行查询。重点讲解了using语句和 Dispose 方法来管理数据库连接,避免资源泄露,还提到了防止SQL注入的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

dotnet 连接sqlserver  ado.net技术
 
连接字符串:指定连接到那台服务器上,那个实力的那个数据库,用户名及其密码是

项目中内嵌mdf 文件,连接字符串"Data

Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|Database1.mdf;Integrat

ed Security=true;User Instance=true"

ado.net中通过SqlConnection 类 创建sqlserver的连接
每一个Sqlconnection的一个实例就代表了一个数据库的连接
 string connectionstring="Data

Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|Database1.mdf;Integrat

ed Security=true;User Instance=true"
SqlConnection con=new SqlConnection(connectionstring);

con.open();

注意:!! 由于ado.net中的连接资源都是实现了IDisposeable接口的 所以使用完这

个对象之后必须要关闭这个对象才行, 关闭时候可以使用 connection,command
1.using(SqlConnection con=new SqlConnection(connectionstring);)

con.open();//离开了这个{}之后就会自动释放这个资源也就是说调用看dispose()
using在出了作用域以后就调用dispose(),像SqlConnection,filestream等的

dispose()内部都会做这样的判断:先判断有没有close,如果没有close,就先close

在dispose
 }//使用这个比较简单实用
2.
try
{
con.open()
}
finaly
{
con.colse();
con.Dispose()//表示 释放这个对象拥有的资源
}
先close() 在 dispose()
面试热点:close()只是关闭了这个连接,但是还能打开    //水管关上了 还能打开
dispose()表示损毁了这个连接资源已经回收了 不能在打开 //把水管给撤了,没有

这个水管了 ,

sqlcommand 语句//执行非查询语句
sqlcommand 表示像数据库提交的一个命令 即sql语句
.using(SqlConnection con=new SqlConnection(connectionstring);)
{
con.open();//离开了这个{}之后就会自动释放这个资源
using (SqlCommand cmd=new CreateCommand())
{
insertstring="insert into students (id,name,score) values(1,'liu',90)";
cmd.ComandText=insertstring;//commandtext属性表示要执行的sql语句
cmd.ExecuteNoQuery();//Query表示 "查询"的意思 在这里是插入语句不是查询 所

以用 ExecuteNoQuery() “执行这个不是查询的语句"  (update insert delete)执

行完后返回的是一个int类型的数 表示影响数据库中的行数
}
}


**executescalar//执行返回一行一列的语句
sqlcommand的executescalar()方法用于执行查询,并返回查询所返回的结果集中第

一行的第一列 因为不能确定返回值的类型,所以返回值是objec类型(int

datatime,atring 等)
!!!一般用于 查询表中总数据条数 , 最大值等 ,还有在aql中解决用户并发注册问

题是提出的newid()和自动增长字段,时候返回 id列值的问题【output inserted.id

】,这样单返回行的!!!
cmd.commandtext="select count(*) from users";
console.writeline(cmd.executescalar());//返回第一行第一列 ,即表中总行数

cmd.commandtext="select * from users";
console.writeline(cmd.executescalar());//这样写一般没什么意思 返回了id的第

一个数

cmd.commandtext="insert into users output inserted.id values('hhe',23)";
int id=convert.toint32(cmd.executescalar());
console.writeline("新插入列的主键值是:{0}",id)


**executereader//执行多行多列数据
cmd.commandtext="select* from users";
using(sqldatereader reader=cmd.executereader())
{
while(reader.read())//返回值是一个bool类型的 只要调用一下他 就会自动向后挪

一行(当然在执行它之前已经在内存中建好了一个地址列表,里面存放了要查询表中

的所有数据),当读到最后一条数据后在调用就会返回false
{
console.writeline(reader.getstring(reader.getorigenal(1)));//
}//getstring (序号n) 表示读取了当前这一行的第n列的值
}//getoridinal(列名) 根据方法中的列名动态得到该列所在这一条数据中的序号,

这个序号从0开始

读出来这个表中所以数据
using (sqldatereader reader=cmd.executereader())
{
while(reader.read())//只能一行一行的往前读 不能往回走也不能跳读
{
int id=convert.toint32(reader.getstring(reader.getoridinal("id")));
string name=reader.getstring(reader.getoridinal("name"));
int id=convert.toint32(reader.getstring(reader.getoridinal("age")));
console.writeline("id={0},username={1},age={2}",id,name,age);
}
}

 

参数化查询
sql语句使用@un表示"此处用参数代替“,像sqlcommand的parameter中添加参数
参数在sql server内部不是简单的字符串替换 而是进行数据比较 所以不会有注入漏


parameters //防止sql注入式漏洞方法 ,不要像上面的形式一样去拼字符串使用cmd

中的参数去传值  先用这种类似于占位符的形式
using(sqlcommand cmd=conn.executecommand())
{
cmd.commandtext="select count(* )from users where username=@un and

password=@pw";
cmd.parameters.add(new sqlparameter("un",name));
cmd.parameters.add(new sqlparameter("pw",password));//会拿着用户输入的字符

串去和数据库表中数据去核对
int count=convert.toint32(cmd.executescalar());
if(count>0)
{console.writeline("登录成功");}
else
{console("失败");}
}

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------详细请查看:http://net.itheima.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值