Ado编程日志
Ado整体概念;
1 ado是封装了ole db 的一套操作数据库的组件。
2 基本上有三个方面组成 connect , command , recordset ;分别代表连接数据库,下命令,获取的数据结果集。
3 用好ado的关键是 熟练使用ado提供的各种对象 object 属性 property ,方法 method,容器 collection
4 command sql语句 , dataadapter dataset和数据源之间的桥梁,connect 链接数据库。
Datareader 向前读数据源中的行数据。 Connectstringbuild ,关联链接数据库的链接字符串。
Net 提供的连接sqlserver数据库的方法
Net 链接数据库的方法有四种:
1 sql 专用的 SqlConnection
2 oralce专用的OracleConnection
3 oledb专用的 OleDbConnection
4 不经常使用。
基本是声明类,然后使用链接字符串对类进行初始化! 进行open操作就可以了。
链接字符串得到的方法 可以使用udl得到。
或者使用:OleDbConnectionStringBuilder 类 创建链接字符串。
Sqlcommand and sqldataadapter and oledatareader的区别
Sqlcommand 就是一个要执行的sql语句,或者是一个存储过程。
从类的角度去考虑就是 核心数据是sql语句和存储过程,但是其也包含一些对数据执行的方法,属性。所以那! 就出现下面这种情况。
1 虽然是sql语句。但是也可以通过方法的实现得到执行的结果,当然是比较简单的结果。要从类的设计上去考虑这个问题就不难那么理解了。
Sqldataadapter 表示的一组命令 和一个数据库连接。用于返回dataset 和更新数据源。是dataset 和数据库之间的桥梁。用于检索和保存数据。
从类的角度考虑net类库,虽然很多类看起来功能相同,提供的方法和属性也差不多,但是可以从不同的角度去考虑这个类,那么必将会另有一番天地。
OleDbDataReader
从 数据源读取数据,但是读取数据的时间是以只进流的方式读取。
另外reader类自己没有构造函数,只能通过command累的方法进行创建。
另外reader使用完毕后,必须自己手工进行关闭,否则comamd就不能进行工作了,知道reader关闭之后才可以;
疑问 : 什么情况下使用 oledbdatareader 这个类,
Ado调用存储过程
示例代码:
//执行sql语句
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("aa",OleDbType.VarChar);
cmd.CommandText = "ProBIZJCX001";
cmd.Connection = cnn;
//todo 以后写了完整的存储过程之后再调用存储过程。
DataSet ds = new DataSet();
OleDbDataAdapter dataAd = new OleDbDataAdapter(cmd);
dataAd.Fill(ds);
this.dataGridView1.DataSource = ds.Tables[0];
MessageBox.Show("获取数据成功!");
数据库连接池
连接到数据源可能需要很长时间。 为了最大程度地降低打开连接的成本,ADO.NET 使用一种称为连接池 的优化技术,这种技术可最大程度地降低重复打开和关闭连接所造成的成本。连接池的关系是放到运行数据库的机器上进行管理的。而不是放到程序运行的机器上。
使用过程中需要注意的问题
1 使用完链接后要关闭连接,close ,dispable 把连接放入连接池。
2 默认的链接是使用连接池的。
保存dataset心得
1 connection cnn;
3 建立command ,非别是select ;update insert delte 四种情况
4 建立dataadpter ,把上面的四种情况闲式赋值给dataadpter。
5 最后调用 dataadpter 的 update 函数 就可以实现这个功能。
6 如果不显式的对commamnd 进行操作,那么就是用 commandbuild 自动管理 command;明天对这种情况进行详细处理。
使用commandbuild自动管理dataadapter执行命令
1 只有新增的数据可以使用commandbuild自动管理command命令。
2 Delte ,update , 都不能进行自动管理command命令。
3 这里以后再研究一下!
处理dataset中多条记录插入到数据中的事务处理方法;
使用环境 :
1 Dataset中表中有超大量的数据。
2 把这些数据存放到数据表中,如果使用sql语句控制事务 ,那么sql有可能超长。所以只能通过net平台的事务处理机制进行处理。
3 大量数据要么都处理,要么都不处理。
注意
1 使用同一个connection对象的command 都用使用同一个tancecation。
2 如果使用comandbuilder 管理command 那么就要显式为每个command指定制定tracecation。
示例代码 如下 :
try
{
//连接数据库
string CnnStr = "";
CnnStr = @"Provider=OraOLEDB.Oracle.1;Password=aaaaaa;User ID=lc00019999;Data Source=mybase";
OleDbConnectionStringBuilder cnnstr = new OleDbConnectionStringBuilder(CnnStr);
System.Data.OleDb.OleDbConnection cnn = new System.Data.OleDb.OleDbConnection();
cnn.ConnectionString = cnnstr.ConnectionString;
cnn.Open();
OleDbCommand cmd = new OleDbCommand("select * from zjzh ", cnn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet("WHSZJZH");
da.Fill(ds, "WHSZJZH");
DataSet insetDs = new DataSet();
insetDs = ds.Clone();
//DataTable insertTb = new DataTable("WHSZJZH");
//insetDs.Tables.Add(insertTb);
DataRowCollection drCollection = insetDs.Tables["WHSZJZH"].Rows;
foreach (DataRow DR in ds.Tables["WHSZJZH"].Rows)
{
drCollection.Add(DR.ItemArray);
}
//保存数据
OleDbCommandBuilder cmdbuilde = new OleDbCommandBuilder(da);
cmd.CommandText = "select * from whszjzh";
cmdbuilde.RefreshSchema();
cmdbuilde.DataAdapter = da;
OleDbTransaction trance = cnn.BeginTransaction();
//trance.Begin();
cmd.Transaction = trance; //注意为每个command 指定事务对象;
try
{
da.Update(insetDs,"WHSZJZH");
trance.Commit();
MessageBox.Show("事务提交成功");
}
catch (Exception err)
{
trance.Rollback();
MessageBox.Show("事务提交失败" + err.Message);
}
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
附件:
常见的数据库连接字符串
对各种数据源连接各种数据库常用连接字符串,归纳了一下,如下:
(一)常用连接:
1.使用SqlConnection对象:
public void SqlConnectionOpen()
{
SqlConnection conn= new SqlConnection();
conn.ConnectionString = "user id=sa;password=;initial catalog=northwind;datasource=localhost;connect Timeout=20";
conn.Open();
}
2.使用OleDbConnection对象:
public void OleDBConnectionOpen()
{
OleDBConnection conn = new OleDbconnection();
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:/Customer.mdb";
conn.Open();
}
(二)其它:
1.ODBC连接Access本地数据库
conGoodDay.Open("Driver={Microsoft Access Driver(*.mdb)};"+"Dbq=C:/a.mdb;"+
"Uid=Admin;"+"Pwd=;");
2.ODBC连接Access系统数据库
conGoodDay.Open("Driver={Microsoft Access Driver(*.mdb)};"+"Dbq=C:/a.mdb;"+
"SystemDB=Admin;"+"Pwd=;");
3.ODBC连接Access系统数据库
conGoodDay.Open("Driver={Microsoft Access Driver(*.mdb)};"+"Dbq=//server/share/a.mdb;");
4.ODBC连接Excel系统数据库
conGoodDay.Open("Driver={Microsoft Access Driver(*.xls)};"+"DriverId=790;"+
"Dbq=C:/a.xls;"+"DefaultDir=c:/somepath;");
5.ODBC连接Oracle系统数据库
conGoodDay.Open("Driver={Microsoft ODBC for Oracle};"+"Server=OracleServer.world;"+
"Uid=Admin;"+"Pwd=password;");
6.ODBC连接Sql Servr
conGoodDay.Open("Driver={Sql Server};"+"Server=myServer;"+"Database=myDatabaseName;"
"Uid=Admin;"+"Pwd=password;");
7.ODBC连接Visual FoxPro
conGoodDay.Open("Driver={Microsoft Visual FoxPro Driver};"+
"SourceType=DBC;"+"SourceDB=c:a.dbc;"+"Exclusive=No;");
另外,一个专业连接字符串网站,里面介绍各种数据源连接各种数据库的字符串:
http://www.connectionstrings.com/
Net数据库连接字符床
ADO.net 中数据库连接方式(微软提供)
微软提供了以下四种数据库连接方式:
System.Data.OleDb.OleDbConnection
System.Data.SqlClient.SqlConnection
System.Data.Odbc.OdbcConnection
System.Data.OracleClient.OracleConnection
下面我们以范例的方式,来依次说明:
System.Data.SqlClient.SqlConnection
常用的一些连接字符串(C#代码):
SqlConnection conn
= new SqlConnection( "Server=(local);user id=sa;pwd=sa;database=Pubs;");
SqlConnection conn
= new SqlConnection("server=(local)//NetSDK;database=pubs;Integrated Security=SSPI");
SqlConnection conn = new SqlConnection(
"Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;");
SqlConnection conn = new SqlConnection(
" data source=(local);initial catalog=xr;integrated security=SSPI;
persist security info=False;workstation id=XURUI;packet size=4096; ");
SqlConnection myConn = new
System.Data.SqlClient.SqlConnection("Persist Security Info=False;Integrated
Security=SSPI;database=northwind;server=mySQLServer");
SqlConnection conn = new SqlConnection(
" uid=sa;pwd=passwords;initial catalog=pubs;data source=127.0.0.1;Connect Timeout=900");
更多字符串连接说明请看MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp
System.Data.OleDb.OleDbConnection
常用的一些连接字符串(C#代码):
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/MyWeb/81/05/GrocerToGo.mdb");
OleDbConnection conn = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Password=;
User ID=Admin;Data Source=grocertogo.mdb;");
OleDbConnection conn = new OleDbConnection(
"Provider=MSDAORA; Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=yes");
OleDbConnection conn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:/bin/LocalAccess40.mdb");
OleDbConnection conn = new OleDbConnection(
"Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI");
更多字符串连接说明请看MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataOleDbOleDbConnectionClassConnectionStringTopic.asp?frame=true
System.Data.OracleClient.OracleConnection
常用的一些连接字符串(C#代码):
OracleConnection myConn = new System.Data.OracleClient.OracleConnection(
"Data Source=Oracle8i;Integrated Security=yes");
更多字符串连接说明请看MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataOracleClientOracleConnectionClassConnectionStringTopic.asp?frame=true
System.Data.Odbc.OdbcConnection
常用的一些连接字符串(C#代码):
OdbcConnection conn = new OdbcConnection(
"Driver={SQL Server};Server=MyServer;Trusted_Connection=yes;Database=Northwind;");
OdbcConnection conn = new OdbcConnection(
"Driver={Microsoft ODBC for Oracle};Server=ORACLE8i7;
Persist Security Info=False;Trusted_Connection=yes");
OdbcConnection conn = new OdbcConnection(
"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/bin/nwind.mdb");
OdbcConnection conn = new OdbcConnection(
"Driver={Microsoft Excel Driver (*.xls)};DBQ=c:/bin/book1.xls");
OdbcConnection conn = new OdbcConnection(
"Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=c:/bin");
OdbcConnection conn = new OdbcConnection("DSN=dsnname");
---------------------------
---------------------------
已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)
---------------------------
确定
---------------------------