黑马程序员_学习日记5_ADO.Net入门1
2012-04-17 00:59
651 查看
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
4月16日
一、ADO.Net基础
程序要和数据库交互要通过ADO.Net进行,通过ADO.Net就能在程序中执行SQL了。
直接在项目中内嵌mdf文件的方式使用SQLServer数据库。
1、新建mdf文件:
(1)解决方案资源管理器->第一个mdf(项目)右键->添加->新建项->数据->基于服务的数据库
(2)双击mdf文件,在左边服务器资源管理器中列出其包含的文件,可以在其中创建表。
2、拷贝mdf文件:
(1)关闭连接:服务器资源管理器->Datebase.mdf右键->关闭连接
(2)打包:解决方案“第一个mdf”右键->在windows资源管理器中打开文件夹->将文件夹和sln文件一起打包
3、将mdf文件附加到SQLServer上:
打开Microsoft SQL Server Management Stdio->数据库(右键)->附加->添加->将mdf文件的路径拷到“文件名”中(例:G:\资料\VisualStudio
2008\Projects\第一个mdf\第一个mdf\Database1.mdf)
不用的时候,右键->任务->分离
二、连接SQLServer
连接字符串:程序通过连接字符串指定要连到哪台服务器上的哪个实例的哪个数据库,用什么用户名密码等。具体代码如下:
static void Main(string[] args)
{
//写程序前必加,具体意思再讲
stringdataDir =
AppDomain.CurrentDomain.BaseDirectory;
if(dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
//连接字符串,注意DataDirectory要加“| |”
SqlConnectionconn =new
SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True");
conn.Open();
Console.WriteLine("打开数据库连接成功");
Console.ReadKey();
}
ADO.Net通过SqlConnection类创建到SQLServer的连接,SqlConnection代表一个数据库连接,ADO.Net中的连接等资源都实现了IDispoable接口,可以使用using进行资源管理,确定其使用范围。具体方法如下:
using (SqlConnection conn =new
SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True"))
{
conn.Open();
}
在写连接字符串的时候DataDirectory没加“| |”,致使程序不能正常运行,求助了好久才被细心的柏云衫同学发现。可见编程是个细活,马虎不得。
DataDirectory:解析为映射和元数据文件的相对路径。这是通过AppDomain.SetData("DataDirectory", objValue)方法设置的值。DataDirectory
替代字符串必须由竖线字符括起来,并且在其名称与竖线字符之间不能存在任何空格。
三、函数、方法
1、ExecuteScalar():返回第一行第一列的数据
2、ExecuteReader():执行有多行结果集的
3、Close():关闭后还能打开
4、Dispose():直接销毁,不能再次使用
四、注入漏洞与参数化查询
//登录程序 演示臭名昭著的SQL注入漏洞攻击
Console.WriteLine("请输入用户名:");
stringusername =
Console.ReadLine();
Console.WriteLine("请输入密码:");
stringpassword =
Console.ReadLine(); //注入漏洞 输入:1' or '1'='1
using(SqlConnection conn =new
SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True"))
{
conn.Open();
using (SqlCommandcmd = conn.CreateCommand())
{
cmd.CommandText=
"select count(*) from T_Users whereUserName='" + username +
"' andPassword='" + password + "'";//注入漏洞后 select count(*) from T_Users whereUserName='admin' and Password='1' or '1'='1'(永远成立)
int i =
Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
Console.WriteLine("登录成功!");
}
else
{
Console.WriteLine("用户名或密码错误!");
}
}
}
//参数化查询,避免注入漏洞
Console.WriteLine("请输入用户名:");
stringusername =
Console.ReadLine();
Console.WriteLine("请输入密码:");
stringpassword =
Console.ReadLine(); //注入漏洞 输入:1' or '1'='1
using(SqlConnection conn =new
SqlConnection(@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText=
"select count(*) from T_Users whereUserName=@UN and Passwprd=@P";//参数化查询,避免注入漏洞
cmd.Parameters.Add(newSqlParameter("UN",username));
cmd.Parameters.Add(newSqlParameter("P",password));
int i =
Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
Console.WriteLine("登录成功!");
}
else
{
Console.WriteLine("用户名或密码错误!");
}
}
}
ADO.Net比WinForm和SQL更难,一天看来是入不了门了,明天继续……
小常识:
今天不小心把窗口拖乱了,找到一个方法重置开发环境:工具->导入导出
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------详细请查看:http://net.itheima.com/
4月16日
一、ADO.Net基础
程序要和数据库交互要通过ADO.Net进行,通过ADO.Net就能在程序中执行SQL了。
直接在项目中内嵌mdf文件的方式使用SQLServer数据库。
1、新建mdf文件:
(1)解决方案资源管理器->第一个mdf(项目)右键->添加->新建项->数据->基于服务的数据库
(2)双击mdf文件,在左边服务器资源管理器中列出其包含的文件,可以在其中创建表。
2、拷贝mdf文件:
(1)关闭连接:服务器资源管理器->Datebase.mdf右键->关闭连接
(2)打包:解决方案“第一个mdf”右键->在windows资源管理器中打开文件夹->将文件夹和sln文件一起打包
3、将mdf文件附加到SQLServer上:
打开Microsoft SQL Server Management Stdio->数据库(右键)->附加->添加->将mdf文件的路径拷到“文件名”中(例:G:\资料\VisualStudio
2008\Projects\第一个mdf\第一个mdf\Database1.mdf)
不用的时候,右键->任务->分离
二、连接SQLServer
连接字符串:程序通过连接字符串指定要连到哪台服务器上的哪个实例的哪个数据库,用什么用户名密码等。具体代码如下:
static void Main(string[] args)
{
//写程序前必加,具体意思再讲
stringdataDir =
AppDomain.CurrentDomain.BaseDirectory;
if(dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
//连接字符串,注意DataDirectory要加“| |”
SqlConnectionconn =new
SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True");
conn.Open();
Console.WriteLine("打开数据库连接成功");
Console.ReadKey();
}
ADO.Net通过SqlConnection类创建到SQLServer的连接,SqlConnection代表一个数据库连接,ADO.Net中的连接等资源都实现了IDispoable接口,可以使用using进行资源管理,确定其使用范围。具体方法如下:
using (SqlConnection conn =new
SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True"))
{
conn.Open();
}
在写连接字符串的时候DataDirectory没加“| |”,致使程序不能正常运行,求助了好久才被细心的柏云衫同学发现。可见编程是个细活,马虎不得。
DataDirectory:解析为映射和元数据文件的相对路径。这是通过AppDomain.SetData("DataDirectory", objValue)方法设置的值。DataDirectory
替代字符串必须由竖线字符括起来,并且在其名称与竖线字符之间不能存在任何空格。
三、函数、方法
1、ExecuteScalar():返回第一行第一列的数据
2、ExecuteReader():执行有多行结果集的
3、Close():关闭后还能打开
4、Dispose():直接销毁,不能再次使用
四、注入漏洞与参数化查询
//登录程序 演示臭名昭著的SQL注入漏洞攻击
Console.WriteLine("请输入用户名:");
stringusername =
Console.ReadLine();
Console.WriteLine("请输入密码:");
stringpassword =
Console.ReadLine(); //注入漏洞 输入:1' or '1'='1
using(SqlConnection conn =new
SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True"))
{
conn.Open();
using (SqlCommandcmd = conn.CreateCommand())
{
cmd.CommandText=
"select count(*) from T_Users whereUserName='" + username +
"' andPassword='" + password + "'";//注入漏洞后 select count(*) from T_Users whereUserName='admin' and Password='1' or '1'='1'(永远成立)
int i =
Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
Console.WriteLine("登录成功!");
}
else
{
Console.WriteLine("用户名或密码错误!");
}
}
}
//参数化查询,避免注入漏洞
Console.WriteLine("请输入用户名:");
stringusername =
Console.ReadLine();
Console.WriteLine("请输入密码:");
stringpassword =
Console.ReadLine(); //注入漏洞 输入:1' or '1'='1
using(SqlConnection conn =new
SqlConnection(@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText=
"select count(*) from T_Users whereUserName=@UN and Passwprd=@P";//参数化查询,避免注入漏洞
cmd.Parameters.Add(newSqlParameter("UN",username));
cmd.Parameters.Add(newSqlParameter("P",password));
int i =
Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
Console.WriteLine("登录成功!");
}
else
{
Console.WriteLine("用户名或密码错误!");
}
}
}
ADO.Net比WinForm和SQL更难,一天看来是入不了门了,明天继续……
小常识:
今天不小心把窗口拖乱了,找到一个方法重置开发环境:工具->导入导出
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------详细请查看:http://net.itheima.com/
相关文章推荐
- 黑马程序员_学习日记45_612数据库开发及ADO.Net(SQL语言)
- 黑马程序员_学习日记49_618数据库开发及ADO.Net(多条件搜索、case…when…语句、索引Index、子查询、分页、Join语句)
- 黑马程序员_学习日记46_614数据库开发及ADO.Net(约束、数据检索)
- 黑马程序员_学习日记50_619数据库开发及ADO.Net(临时表、表变量、视图、变量、if…else…和while、事务、存储过程、触发器)
- 黑马程序员_学习日记47_615数据库开发及ADO.Net(连接字符串、SqlDataReader对象、连接池)
- 黑马程序员_学习日记15_ADO.Net之DataSet
- 黑马程序员_学习日记48_616数据库开发及ADO.Net(带参数的Sql语句、数据库与文本文件导入导出、省市联动、资料管理器、DataSet (ado.net断开式数据访问)、SQLHelper)
- 黑马程序员_学习日记51_621数据库开发及ADO.Net(游标、动态sql)
- 黑马程序员_学习日记6_ADO.Net入门2
- 黑马程序员之C#学习笔记:ADO.NET入门级材料
- .NET视频学习笔记 新手入门-ADO.Net连接SQLServer
- 黑马程序员--ado.net学习整理
- ado.net学习笔记入门
- 黑马程序员之ADO.NET学习笔记:ADO.NET如何读取Excel
- [新手入门]快速学习 ADO.NET Entity Framework系列文章 #4 -- 数据新增、删除、修改(ObkectContext的 .SaveChange()方法)
- 黑马程序员之ADO.NET学习笔记:通过SqlCommand对象执行SQL语句
- 黑马程序员之ADO.NET学习笔记:不用第三个变量,实现两数交换
- 黑马程序员ADO.NET学习
- 黑马程序员_学习日记70_721ASP.NET(Web三层增删查改CRUD)
- ado.net 实体框架快速入门学习