ado.net oracle里.cs没有东西怎么班

产品数据管理图文档管理系统ado.netbs架构cs架构硕士论文
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
产品数据管理图文档管理系统ado.netbs架构cs架构硕士论文
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口asp.net 和ado.net有什么异同?_百度知道
asp.net 和ado.net有什么异同?
提问者采纳
主要表现对象为: 那winforms呢,但是当然和winforms有区别了,而asp? 回答,以后有经验自然会理解了.NET方式与以前的ADO方式或者Oledb性能要强很多…… 追问。 满意答案碳7级ado.NET基础类的书藉会详解这些内容……ADO,asp,是这样哇,不能与asp.net的话是将web页面也放在一个窗体里.NetFramdwork 的网站开发技术:DataSet 内存加载数据方式: 知道了。 提问者 的感言.NET方式。在数据库访问主要使用ADO.net是基于: 喔,这个设计到web的开发.net是数据库的一种访问方式.net相提并论,呵呵.就是你说的CS 追问: 界面程序啊,非常非常感谢!找一些ASPwinforms主要是CS的开发
其他类似问题
为您推荐:
ado的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1、A基础介绍
&(1、程序要和数据库交互要通过进行,通过就能在程序中执行了。中提供了对各种不同数据库的统一操作接口。
& &(2、直接在项目中内嵌文件的方式使用数据库(基于服务的数据库)。文件随着项目走,用起来方便,和在数据库服务器上创建数据库没什么区别,运行的时候会自动附加()。
&(3、双击文件会在&服务器资源管理器&中打开,管理方式和在没什么本质不同,要拷贝文件需要关闭所有指向文件的连接。
&(4、正式生产运行的时候附加到上、修改连接字符串即可,除此之外没有任何的区别,在&数据库&节点上点右键&附加&;在数据库节点上&任何&分离就可以得到可以拷来拷去文件。
&(5、用的时候要在控制台、项目中的函数最开始的位置加入&一段神奇的代码"。项目中不需要。
2 using System.Collections.G
3 using System.L
4 using System.T
5 using System.Data.SqlC
7 namespace myadonet
class Program
static void Main(string[] args)
//神奇代码
string dateDir = AppDomain.CurrentDomain.BaseD
if (dateDir.EndsWith(@"\bin\Debug\")
|| dateDir.EndsWith(@"\bin\Release\"))
dateDir = System.IO.Directory.GetParent(dateDir).Parent.Parent.FullN
AppDomain.CurrentDomain.SetData("DataDirectory", dateDir);
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.Integrated Security=TUser Instance=True"))
conn.Open();
Console.WriteLine("连接成功!");
Console.ReadKey();
& & & &(1、连接字符串:程序通过连接字符串指定要连哪台服务器上的、哪个实例的哪个数据库、用什么用户名密码等。
& & & &(2、项目内嵌文件形式的连接字符串&&。&表示本机上的实例,如果数据库实例名不是,则需要修改。&&为的文件名。
& & & &(3、中通过在创建的连接,代表一个数据库连接,中的连接等资源都实现了接口,可以使用进行资源管理。执行这段段代码,如果成功了就。
& & & &(4、在实现了IDisposable接口的对象,在使用完后需要用行资源释放。
3、执行简单的语句
& & (1、表示向服务器提交的一个命令(语句等)。
属性为要执行的语句,方法执行一个非查询语句(、、等)
& & &(3、返回值是执行的影响行数
在conn.open();下面敲上这样一段代码即可插入数据库数据:
2 using System.Collections.G
3 using System.L
4 using System.T
5 using System.Data.SqlC
7 namespace myadonet
class Program
static void Main(string[] args)
//神奇代码
string dateDir = AppDomain.CurrentDomain.BaseD
if (dateDir.EndsWith(@"\bin\Debug\")
|| dateDir.EndsWith(@"\bin\Release\"))
dateDir = System.IO.Directory.GetParent(dateDir).Parent.Parent.FullN
AppDomain.CurrentDomain.SetData("DataDirectory", dateDir);
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.Integrated Security=TUser Instance=True"))
conn.Open();
/* 插入数据* */
using (SqlCommand commd = conn.CreateCommand()) {
mandText = "Insert into T_UserInfo (sUser,sPassWord) values('admin','888888')";
commd.ExecuteNonQuery();
Console.WriteLine("插入成功");
Console.WriteLine("连接成功!");
Console.ReadKey();
4、模拟登陆
同样在conn.open();下面敲上这样一段代码即可
bool flag = true;
while (flag)
Console.WriteLine("请输入用户名:");
string sUser = Console.ReadLine();
using(SqlCommand cmd=conn.CreateCommand()){
mandText = "Select * from T_UserInfo where sUser='"+sUser+"'";
using (SqlDataReader reader = cmd.ExecuteReader()) {
if (reader.Read())
Console.WriteLine("请输入密码:");
string sPassWord = Console.ReadLine();
string QueryPassWord=reader.GetString(reader.GetOrdinal("sPassWord"));
if (sPassWord == QueryPassWord)
Console.WriteLine("登陆成功!");
flag = false;
Console.WriteLine("密码错误");
else { Console.WriteLine("用户不存在,请重新输入"); }
& & & (1、SqlCommand中的ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以,ExecuteScalar的返回值为object类型。
& & &(2、得到自动增长字段的主键值,在values关键词前加上output inserted.Id,其中Id为主键字段名。执行结果就是插入的主键值,用ExecuteScalar执行最方便。
using (SqlCommand cmd = conn.CreateCommand())
mandText = "Select * from T_UserInfo";
using (SqlDataReader reader = cmd.ExecuteReader())
while (reader.Read()) //这里得到一个bool值
string sUser = reader.GetString(reader.GetOrdinal("sUser"));
//int ID = reader.GetInt32(reader.GetOrdinal("ID"));
string sPassWord = reader.GetString(reader.GetOrdinal("sPassword"));
//多行结果集
Console.WriteLine("{0}{1}", sUser, sPassWord);
&(3、执行有多行结果集的用&
& & & & &&reader的GetString、GetInt32等方法只接受整数参数,也就是序号,用GetOrdinal方法根据列名动态得到序号了。
/*最佳登陆方式*/
bool flag = true;
while (flag)
Console.WriteLine("请输入用户名:");
string sUser = Console.ReadLine();
using (SqlCommand cmd = conn.CreateCommand())
mandText = "Select * from T_UserInfo where sUser='" + sUser + "'";
using (SqlDataReader reader = cmd.ExecuteReader())
if (reader.Read())
Console.WriteLine("请输入密码:");
string sPassWord = Console.ReadLine();
string QueryPassWord = reader.GetString(reader.GetOrdinal("sPassWord"));
if (sPassWord == QueryPassWord)
Console.WriteLine("登陆成功!");
flag = false;
Console.WriteLine("密码错误");
else { Console.WriteLine("用户不存在,请重新输入"); }
6、为什么用?
& & & & &Close:关闭以后还能打开。&&Dispose:直接销毁,不能再次使用。
& & & & &Using在出了作用域以后调用Dispose,SqlConnection&、FileStream&等的Dispose内部都会做这样的判断:判断有没有close,如果没有,就
先Close再Dispose。
7、注入漏洞攻击/参数化查询
& & & &**例如第4点所说的登录判断:select count(*)&from T_Users where sUser=&and Password=&,将参数拼到语句中。
& & & & & &我们可以通过构造恶意的sPassword输入 & & 1`or`1`=`1
& & & & & &编译通过后识别出来的就是:select count(*) from T_Users where sUser= &admin& and Password=&1`or`1`=`1&
& & & **参数化查询解决漏洞攻击
& & & & & &SQL语句使用@sUser表示&此处用参数代替&,向SqlCommand的Parameters中添加参数。
1 mandText = "select count(*)from T_Users where sUser =@UN and sPassword=@PW";
3 cmd.Parameters.Add(new SqlParameter("UN", sUser));
5 cmd.Parameters.Add(new SqlParameter("PW", sPassword));
& & & & & &参数在内部不是简单的字符串替换,直接用添加的值进行数据比较,因此不会有注入漏洞攻击。
&8、模拟窗体登陆,并且设置登陆错误次数
2 using System.Collections.G
3 using ponentM
4 using System.D
5 using System.D
6 using System.L
7 using System.T
8 using System.Windows.F
9 using System.Data.SqlC
11 namespace myAdoNet02
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void IntsErrorTime()
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.
Integrated Security=TConnect Timeout=30;User Instance=True"))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
using (SqlCommand updateCmd = conn.CreateCommand())
//假如用户输入的用户名和密码错误次数过多,则将数据库中的错误记录次数加1
mandText = "update T_UserInfo Set sErrorTime=sErrorTime+1 where sUser=@sUser";
updateCmd.Parameters.Add(new SqlParameter("sUser", textBox1.Text));
updateCmd.ExecuteNonQuery();
private void ResetsErrorTime()
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\UsersDB.
Integrated Security=TConnect Timeout=30;User Instance=True"))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
using (SqlCommand updateCmd = conn.CreateCommand())
//假如用户输入的用户名和密码均正确,则将数据库的错误次数归0,重新统计。
mandText = "update T_UserInfo Set sErrorTime=0 where sUser=@sUser";
updateCmd.Parameters.Add(new SqlParameter("sUser", textBox1.Text));
updateCmd.ExecuteNonQuery();
private void button1_Click(object sender, EventArgs e)
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\UsersDB.
Integrated Security=TConnect Timeout=30;User Instance=True"))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText = "Select * from T_UserInfo where sUser=@sUser";//加"@"参数化查询
cmd.Parameters.Add(new SqlParameter("sUser", textBox1.Text));
using (SqlDataReader reader = cmd.ExecuteReader())
if (reader.Read())
int errorTimes = reader.GetInt32(reader.GetOrdinal("sErrorTime"));
if (errorTimes & 3)
MessageBox.Show("错误次数过多,请三小时后再登录");
string dbpassword = reader.GetString(reader.GetOrdinal("Password"));
if (dbpassword == textBox2.Text)
ResetsErrorTime();
MessageBox.Show("登录成功!");
//在同一个连接中,如果SqlDataReader没有关闭,那么是不能执行Update之类的语句的,
//因此,Update语句要放在其它函数内。
IntsErrorTime();//调用此方法即可
MessageBox.Show("登录失败!");
MessageBox.Show("用户名不存在!");
9、导入导出数据案例
2 using System.Collections.G
3 using ponentM
4 using System.D
5 using System.D
6 using System.L
7 using System.T
8 using System.Windows.F
9 using System.IO;
10 using System.Data.SqlC
12 namespace myAdoNet02
public partial class Form2 : Form
public Form2()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
//单纯从button中的name属性objImport得到ShowDialog()方法是不科学的
OpenFileDialog objImport = new OpenFileDialog();
if (objImport.ShowDialog() != DialogResult.OK)
using (FileStream filestream = File.OpenRead(objImport.FileName))
using (StreamReader streamreader = new StreamReader(filestream))
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.
Integrated Security=TConnect Timeout=30;User Instance=True"))
//创建连接是很耗时的,所以不能每插入一条数据就创建一次连接
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText = "insert into T_UserInfo(sUser,sPassWord) values(@sUser,@sPassWord)";
string line = null;
while ((line = streamreader.ReadLine()) != null)
string[] str = line.Split('|');
string sUser = str[0];
string sPassWord = str[1];
cmd.Parameters.Clear();
//参数不能重复添加,在本while中用的是同一个SqlCommand对象,所以要在用完一次后,清除参数
cmd.Parameters.Add(new SqlParameter("sUser", sUser));
cmd.Parameters.Add(new SqlParameter("sPassWord", sPassWord));
cmd.ExecuteNonQuery();
MessageBox.Show("导入成功");
10、手机号码归属地查询省市下拉列表实例
& &(1、数据库资源-全国省市数据库 :
& &(2、数据库连接:大概有两种形式
&add key="" value /?&add name="" connectonstring="" /?这两方法对应的后台访问方式不一样的第一种:System.Configuration.ConfigurationManager.AppSettings["myConn"]第二种:ConfigurationManager.ConnectionStrings["myConn"].ConnectionString
& &(3、要在类库中找到ConfigurationManager.ConnectionStrings需要添加System.configuration
& (4、遇到一个问题,是这样,因为同一个解决方案里我建立了多个项目,项目中基于数据库服务文件名字起的差不多(我都是没改名,自动生成的名字),所以导致后
面在生成调试的时候,总是遇到&数据库未创建实例&这样的错误。
&下面是手机号码归属地查询省市下拉列表实例:
2 using System.Collections.G
3 using ponentM
4 using System.D
5 using System.D
6 using System.L
7 using System.T
8 using System.Windows.F
9 using System.Data.SqlC
10 using System.C
12 namespace myAdoNet02
public partial class Form3 : Form
public Form3()
InitializeComponent();
private void Form3_Load(object sender, EventArgs e)
string myconStr = ConfigurationManager.ConnectionStrings["myConStr"].ConnectionS
using (SqlConnection conn = new SqlConnection(myconStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand()) {
mandText = "select * from promary";
using (SqlDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
//构造model类
Promary p = new Promary();
//将数据库中的数据赋值给model类中的属性值
p.ID = reader.GetInt32(reader.GetOrdinal("proID"));
p.sName = reader.GetString(reader.GetOrdinal("proName"));
Console.WriteLine(p.ID);
Console.WriteLine(p.sName);
Console.WriteLine(p);
省.Items.Add(p);
//选择省后,查看市
private void 省_SelectedIndexChanged(object sender, EventArgs e)
市.Items.Clear();//清楚旧数据
Promary p2 = (Promary)省.SelectedI
int proID = p2.ID;
string myConStr = ConfigurationManager.ConnectionStrings["myConStr"].ConnectionS
using (SqlConnection conn = new SqlConnection(myConStr))
conn.Open();
using(SqlCommand cmd=conn.CreateCommand()){
mandText = "select * from city where proID=@ID";
cmd.Parameters.Add(new SqlParameter("ID", proID));
using (SqlDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
string sCityName = reader.GetString(reader.GetOrdinal("cityName"));
市.Items.Add(sCityName);
class Promary
//下拉框的DisplayMember要设置为sName,才能显示出来
public string sName { set; get; }
public int ID { set; get; }
配置文件App.config
1 &?xml version="1.0" encoding="utf-8" ?&
2 &configuration&
&connectionStrings&
name="myConStr"
connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.
Integrated Security=TConnect Timeout=30;User Instance=True"/&
&/connectionStrings&
7 &/configuration&
11、手机号码归属地查询
&后台代码:
2 using System.Collections.G
3 using ponentM
4 using System.D
5 using System.D
6 using System.L
7 using System.T
8 using System.Windows.F
9 using System.Data.SqlC
10 using System.C
11 using System.IO;
13 namespace 手机归属地导入查询
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
FolderBrowserDialog dlg = new FolderBrowserDialog();
if (dlg.ShowDialog() != DialogResult.OK)
string path = dlg.SelectedP
//清除数据
String connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
using (SqlConnection conn = new SqlConnection(connStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText = "delete from T_PhoneInfo";
cmd.ExecuteNonQuery();
MessageBox.Show("11!");
string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);
using (SqlConnection conn = new SqlConnection(connStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText = "Insert into T_PhoneInfo(sEndNo,sName,sStartNo) values(@sEndNo,@sName,@sStartNo)";
foreach (string file in files)//遍历文件名
string 运营商名称 = Path.GetFileNameWithoutExtension(file);
//不用StreamReader,因为文件很小,
string[] lines = File.ReadAllLines(file, Encoding.Default);
//一次性加载,也不占多少内存,ReadAllLines默认编码是UTF-8
MessageBox.Show("22!");
foreach (string line in lines)
string[] strs = line.Split('-');
string 开始号码 = strs[0];
string 结束号码 = strs[1];
string 市 = strs[2];
InsertExecuteNonQuery(结束号码, 运营商名称+市, 开始号码);
MessageBox.Show("导入成功!");
public int InsertExecuteNonQuery(string sEndNo, string sName, string sStartNo)
string sqlString = "Insert into T_PhoneInfo(sEndNo,sName,sStartNo) values(@sEndNo,@sName,@sStartNo)";
String connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
using (SqlConnection connetion = new SqlConnection(connStr))
connetion.Open();
using (SqlCommand Command = new SqlCommand(sqlString, connetion))
SqlParameter[] param = new SqlParameter[]
new SqlParameter("@sEndNo", sEndNo),
new SqlParameter("@sName", sName),
new SqlParameter("@sStartNo", sStartNo)
Command.Parameters.AddRange(param);
return Command.ExecuteNonQuery();
program.cs
2 using System.Collections.G
3 using System.L
4 using System.Windows.F
6 namespace 手机归属地导入查询
static class Program
/// &summary&
/// 应用程序的主入口点。
/// &/summary&
[STAThread]
static void Main()
//(1)不要忘记把这段代码放进来
//一定要放在最开始,否则提示成功也没有导入到数据库中
//(2)数据库表设置主键
string dataDir = AppDomain.CurrentDomain.BaseD
MessageBox.Show(dataDir);
if (dataDir.EndsWith("\\bin\\Debug\\")
|| dataDir.EndsWith("\\bin\\Release\\"))
//dataDir = System.IO.Directory.GetParent(dataDir).Parent.FullN
dataDir=dataDir.Replace("\\bin\\Debug\\", "");
MessageBox.Show(dataDir);
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
配置文件:& &DataDirectory路径无法读取到,因为在DBbrowser里的mdf并不是debug中的mdf,所以改成绝对路就可以了
备注:如果配置文件不改为绝对路径的话,需要改program.cs中
1 &?xml version="1.0" encoding="utf-8" ?&
2 &configuration&
&connectionStrings&
name="ConnStr"
connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\phone.
Integrated Security=TUser Instance=True"/&
&/connectionStrings&
7 &/configuration&
8 &!--Connect Timeout=30;--&
12、DataSet的基本使用
& (1、封装一个SQLHelper类:(用于被其它代码调用,以下为该类的完整代码)
***1、该类中含有四个方法,分别是:ExecuteNonQuery(string sql, params SqlParameter[] parameters)、ExecuteScalar(string sql, params
SqlParameter[] parameters)、ExecuteReader(string sql, params SqlParameter[] parameters)和ExecuteDataTable(string sql, params
SqlParameter[] parameters)。
在封装这个类之前称简单介绍几点:
a、封装一个SQLHelper类方便使用,提供ExecuteNonQuery(string sql, params SqlParameter[] parameters);ExecuteScalar(string sql,
params SqlParameter[] parameters);ExecuteReader(string sql, params SqlParameter[] parameters);ExecuteDataTable(string sql,
params SqlParameter[] parameters)等方法,网上有微软提供的最全的SQLHelper类,是Enterprise Library中的一部分。
b、用SQLHelper重写登录程序
c、new SqlParameter("e",0)的陷阱
d、sqlconnection在程序中一直保持它open可以吗?对于数据库来说,连接是非常宝贵的资源,一定要用完不close或dispose。
& & & & & &***2、ExecuteScalar 和ExecuteNonQuery的区别
& & & & & &a、ExecuteScala 返回r结果集中第一行的第一列或空引用(如果结果集为空),返回的是一个object
& & & & & &b、ExecuteNonQuery针对Connection&执行 SQL 语句并返回受影响的行数,返回的是一个int型值。
&SQLHelp.cs
2 using System.Collections.G
3 using System.L
4 using System.T
5 using System.Data.SqlC
6 using System.C
7 using System.D
9 namespace 封装
class SQLHelp
public static readonly string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
/*优点:1、把数据库连接代码都放在SQLHelper中,使代码更简洁
2、使用DataTable可以随意读取数据库,而之前做的用户登录使用的SqlReader只能逐行往前读*/
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
using (SqlConnection conn = new SqlConnection(connStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText =
foreach (SqlParameter parameter in parameters)
cmd.Parameters.Add(parameter);
return cmd.ExecuteNonQuery();
public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
using (SqlConnection conn = new SqlConnection(connStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText =
foreach (SqlParameter parameter in parameters)
cmd.Parameters.Add(parameter);
//执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其它的行或列。
return cmd.ExecuteScalar();
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters)
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
using (SqlConnection conn = new SqlConnection(connStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText =
foreach (SqlParameter parameter in parameters)
cmd.Parameters.Add(parameter);
return cmd.ExecuteReader();
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
using (SqlConnection conn = new SqlConnection(connStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText =
foreach (SqlParameter parameter in parameters)
cmd.Parameters.Add(parameter);
//执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其它的行或列。
DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
return dataset.Tables[0];
2 using System.Collections.G
3 using ponentM
4 using System.D
5 using System.D
6 using System.L
7 using System.T
8 using System.Windows.F
9 using System.C
10 using System.Data.SqlC
11 using System.IO;
12 using 封装.DataSet1TableA
14 namespace 封装
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
//ExecuteNonQuery 插入数据
SQLHelp.ExecuteNonQuery("insert into T_PhoneInfo(sStartNo,sEndNo,sName) values(@sStartNo,@sEndNo,@sName)", new SqlParameter("sStartNo", "11"), new SqlParameter("sEndNo", "11"), new SqlParameter("sName", "gaug懂"));
MessageBox.Show("插入数据成功");
private void button2_Click(object sender, EventArgs e)
//ExecuteScalar 查询条数
object i = SQLHelp.ExecuteScalar("select count(*)from T_PhoneInfo");
MessageBox.Show(Convert.ToString(i));
private void button3_Click(object sender, EventArgs e)
//SqlDataReader
SqlDataReader reader = SQLHelp.ExecuteReader("select * from T_PhoneInfo");
while (reader.Read())
//运行到这里报错,因为跟数据库的连接已关闭,利用DataSet可以解决这类问题
string sName = reader.GetString(reader.GetOrdinal("sName"));
private void button4_Click(object sender, EventArgs e)
//注意只有在小数据量的时候才往DataSet里放,
//因为DataSet要占内存,大数据量的时候还是要用DataReader
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
//定义一个DataSet
DataSet dataset = new DataSet();
//数据库操作表
using (SqlConnection con = new SqlConnection(connStr))
con.Open();
using (SqlCommand cmd = con.CreateCommand())
mandText = "select * from T_PhoneInfo";
SqlDataAdapter adapter = new SqlDataAdapter(cmd); //执行select语句(要把cmd传进去)
adapter.Fill(dataset);//将执行结果得到的数据填充到dataset中
//数据库操作列
///取dataset的表中的第0条数据
DataTable table = dataset.Tables[0];
for (int i = 0; i & table.Rows.C i++)
DataRow row = table.Rows[i];
string sName = Convert.ToString(row["sName"]);
MessageBox.Show(sName);
private void button5_Click(object sender, EventArgs e)
DataTable table = SQLHelp.ExecuteDataTable("select * from T_PhoneInfo");
for (int i = 0; i & table.Rows.C i++)
DataRow row = table.Rows[i];
string sName = Convert.ToString(row["sName"]);
MessageBox.Show(sName);
& & &(2、利用上述SQLHelper.cs类中的ExecuteDataTable(string sql, params SqlParameter[] parameters)方法,做一个登陆界面
2 using System.Collections.G
3 using ponentM
4 using System.D
5 using System.D
6 using System.L
7 using System.T
8 using System.Windows.F
9 using System.C
10 using System.Data.SqlC
11 using System.IO;
12 using 封装.DataSet1TableA
14 namespace 封装
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button9_Click(object sender, EventArgs e)
DataTable table = SQLHelp.ExecuteDataTable("select * from T_UserInfo where sUser=@sUser", new SqlParameter("sUser", txtUser.Text));
if (table.Rows.Count &= 0)
MessageBox.Show("用户名不存在");
//用户名存在,已经知道是哪一列了,要返回的行是从零开始的索引
DataRow row = table.Rows[0];
int sErroTime = Convert.ToInt32(row["sErroTime"]);
if (sErroTime & 3)
MessageBox.Show("登陆次数过多");
string sPassWord = Convert.ToString(row["sPassWord"]);
if (sPassWord == txtPassWord.Text)
SQLHelp.ExecuteNonQuery("update T_UserInfo set sErroTime=0 where sUser=@sUser", new SqlParameter("sUser", txtUser.Text));
MessageBox.Show("登陆成功");
SQLHelp.ExecuteNonQuery("update T_UserInfo set sErroTime=sErroTime+1 where sUser=@sUser", new SqlParameter("sUser", txtUser.Text));
MessageBox.Show("密码错误!");
& & & & & &**修改DataSet单击事件如下:
a、可以更新行row["Name"]="sUser"、删除行datatable.Rows.Remove()、新增行datatable.NewRow()。这一切都是修改的内存中的DataSet,并没
有修改数据库。
b、可以调用SqlDataAdapter的Update方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet、DataTable
或者若干DataRow。但是需要为SqlDataAdapter提供DeleteCommand、UpdateCommand、InsertCommand它才知道如何将对DataSet的修改提交
到数据库,由于这几个Command要求的格式非常苛刻,因此开发人员自己写非常困难;可以用SqlCommandBuilder自动生成这几个Command,
SqlCommandBuilder要求表必须有主键。
c、通过DataRow的RowState可以获得行的状态(删除、修改、新增等);调用DataSet的GetChanges()方法得到变化的结果集,降低传递的资源
& & & & & &**测试强类型DataSet单击事件
& & & & & & & & 敲写代码前,还要添加一个数据集DataSet1.xsd文件,然后打开数据集,将表拖到数据集中:
1 private void button6_Click(object sender, EventArgs e)
//实参为0与不为0时,这两种情况下将光标放在SqlParameter中按F12转到定义就出现不同的重载函数的情况,
//非常诡异类型转换陷阱!
SQLHelp.ExecuteDataTable("select * from T_Users where Id=@Id", new SqlParameter("Id", (object)0));
//修改方法是在0前加上object
private void button7_Click(object sender, EventArgs e)
//修改DataSet
DataSet dataset = new DataSet();
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionS
using (SqlConnection conn = new SqlConnection(connStr))
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
mandText = "select * from T_UserInfo";
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
//修改Dataset中的数据
DataTable talbe = dataset.Tables[0];
DataRow row = talbe.Rows[0];
row["sUser"] = "lcy";
talbe.Rows.RemoveAt(1);//删除一行
DataRow otherRow = talbe.NewRow();//新加一行
//自动生成更新语句
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
//更新DataSet,同步DataSet中的数据到数据库
adapter.Update(dataset);
//对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。
//解决方案:表要设置主键
private void button8_Click(object sender, EventArgs e)
//测试强类型DataSet
T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter();
封装.DataSet1.T_UserInfoDataTable data = adapter.GetData(); //获取数据
for (int i = 0; i & data.C i++)
封装.DataSet1.T_UserInfoRow userRow = data[i];
MessageBox.Show(userRow.sUser);
&(4 、可空数据类型
2 using System.Collections.G
3 using System.L
4 using System.T
6 namespace 可空数据类型
class Program
static void Main(string[] args)
string s1 = null;
int? i2 = 0;
int? i3 = null;//int? &可空的int,解决数据库和C#对于int是否可以为null的不同所设置的
if (i3 == null)
Console.WriteLine("i3为空");
int i4 = (int)i3; //将可空的数据赋给不可空的,会报错,加(int)i3以保证i3一定不为空
Console.WriteLine("i3不为空,i3++={0}", i3);
if (i3.HasValue)
int i4 = i3.V
Console.WriteLine("i3不为空");
Console.WriteLine("i3为空");
int i6 = 10;
int? i5 = i6; //将不可空的赋给可空的,不会报错
&(5、强类型DataSet判断数据库字段是否为null,强类型DataSet登陆,数据库连接的连续性
2 using System.Collections.G
3 using ponentM
4 using System.D
5 using System.D
6 using System.L
7 using System.T
8 using System.Windows.F
9 using 封装.DataSet1TableA
10 using System.D
12 namespace 封装
public partial class Form2 : Form
public Form2()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
//判断数据库字段是否为空
T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter();
封装.DataSet1.T_UserInfoDataTable table = adapter.GetData();
封装.DataSet1.T_UserInfoRow row = table[1];
if (row.IssPassWordNull())
table[1].sPassWord = "888888";
adapter.Update(table);
MessageBox.Show("密码为空,已重置密码");
MessageBox.Show("密码为:"+table[0].sPassWord);
private void button2_Click(object sender, EventArgs e)
//DataSet 密码登陆
T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter();
封装.DataSet1.T_UserInfoDataTable table = adapter.GetDataByUser(txtUser.Text);
if (table.Count &= 0)
MessageBox.Show("用户不存在");
封装.DataSet1.T_UserInfoRow row = table[0];
if (row.sErroTime & 3)
MessageBox.Show("登陆次数过多");
if (row.sPassWord == txtPassWord.Text)
adapter.UpdateErrorTimeBack(row.sUser);
MessageBox.Show("登陆成功");
adapter.UpdateErrorTimeAdd(row.sUser);
MessageBox.Show("登陆失败,密码错误");
private void button3_Click(object sender, EventArgs e)
Stopwatch gameTime = new Stopwatch();
gameTime.Start();
T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter();
/*慢方法:数据连接是间断的
for (int i = 0; i & 3000; i++)
adapter.Insert(i.ToString(),i.ToString(),0);
/*快方法:数据连接是连续的*/
adapter.Connection.Open();
for (int i = 0; i & 3000; i++)
//先删除上个例子的数据
adapter.Delete(i.ToString(), i.ToString(), 0);
adapter.Insert(i.ToString(), i.ToString(), 0);
adapter.Connection.Close();
gameTime.Stop();
MessageBox.Show(gameTime.Elapsed.ToString());
阅读(...) 评论()

我要回帖

更多关于 ado.net oracle 的文章

 

随机推荐