ADO.NET 对象模型 : net数据提供程序:sql client and oledb or sql xml 联机对象:Connection,Command,DataReader,Transaction,Parameter,DataAdapter 脱机对象:DataTable,DataColumn,Consraint,DataRow,dataset,dataview,datarelation 元数据 强类型dataset对象 封装也是面向对象的重要特征之一 private:私有成员,在类的内部才可以访问; protected: 保护成员,该类内部和继承类才可以访问; public:公共成员,无访问限制 internal:在同一个命名空间内可以访问; protected internal:访问仅限于从包含类派生的当前程序集或类型. 一个类可以实现多个接口; 接口的成员包括从基接口继承的成员和由接口本身声明的成员(包括方法,属性,事件或索引器) 接口不支持 虚方法; 接口不能被实例化; 客户端可以通过调用 dataset 的getChanges方法来将包含已修改行的dataset发送回中间层. 连接字符串 conection的state属性 ado.net p70 stateChange事件 p80 sql 2000 :provider=SQLOLEDB;Data Source=MyServer\MyInstance;Initial Catalog=MyDatabase;Integrated Security=SSPI;(或者Trusted_Connection=Yes;) access:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:\PATH\MyDatabase.MDB; 关闭连接池: oledb 在字符串中添加:OLE DB Services=-4; sql 添加:Pooling=False; 连接命令command: 一.获取多个结果 strConn="#%#$%$%@$"; OleDbConnection cn =new OleDbConnection(strConn); cn.Open(); string strSQL="SELECT A,B FROM TABLE;" + "SELECT C,D FROM TABLE1;" +"SELECT E,F FROM TABLE2"; strSql="select语句"; OleDbDataReader dr=cmd.ExecuteReader(); do { while(dr.Read()) Console.Writeline(dr[0] + "-" + dr[1]); Console.WriteLine(); }while (dr.NextResult()); 二.只返回一个值 string strConn="@#$%$#%@#$%"; OleDbConnection cn = new OleDbConnection(strConn); cn.Open(); OleDbCommand cmd = cn.CreateCommand(); cmd.CommandText ="select count(*) FROM TABLE"; int count=Convert.ToInt32(cmd.ExecuteScalar()); cmd.CommandText="select name from table where id = '123'"; string strname = Convert.ToString(cmd.ExecuteScalar()); 三.调用存储过程 //存储过程通过结果集返回信息 /* CREATE PROCEDURE Getinfo(@id int) AS SELECT id,name,info,addr FROM TABLE WHERE id=@id RETURN */ string strConn="@#$%$%@#$%"; OleDbConnection cn = new OleDbConnection(strConn); cn.open(); OleDbCommand cmd = cn.CreateCommand(); cmd.CommandText ="Getinfo"; cmd.CommandType =CommandType.StoreProcedure; //CommandType还有两个值:Text,TableDirect //TableDirect是为CommandText属性预先加入"SELECT * FROM" cmd.Parameters.Add("@id",OleDbType.integer); cmd.Parameters [0].Value="key"; OleDbDataReader dr = cmd.ExecuteReader(); if { dr.Read()) Console.WriteLine(dr["info"]); else Console.WriteLine("No info found"); dr.Close();//貌似新版本不要关闭. cn.Close(); 另一种调用存储过程 {返回值=CALL MyStoreProc(?,?,?)} eg: cmd.CommandText ="{CALL Getinfo(?)}" cmd.CommandType =CommandType.Text //存储过程通过输出参数返回信息 /* CREATE PROCEDURE Getinfo (@id int,@name nvarchar(40) OUTPUT, @info nvarchar(500)OUTPUT, @addr nvarchar(100) OUTPUT)AS SELECT @name = name,@info=information,@addr=address FROM TABLE WHERE id=@id IF @@ROWCOUNT =1 RETURN 0 ELSE RETURN -1 */ eg: string strConn ="2#$@#$@#%#@$"; OleDbConnection cn = new OleDbConnection(strConn); cn.Open(); OleDbCommand cmd =cn.CreateCommand(); cmd.CommandText ="{?=CALL Getinfo(?,?,?,?)}; cmd.Parameters.Add("@RetVal",OleDbType.integer);//返回参数 cmd.Parameters.Add("@id",OleDbType.integer); cmd.Parameters.Add("@name",OleDbType.varWChar,40);//varWChar?另查资料 cmd.Parameters.Add("@info",OleDbType.varWChar,500);/同上 cmd.Parameters.Add("@addr",OleDbType.varWChar,100) cmd.Parameters["@RetVal"].Direction=ParameterDirection.ReturnValue; cmd.Parameters["@id"].Value="123"; cmd.Parameters["@name"].Direction =ParameterDirection.Output; cmd.Parameters["@info"].Direction =ParameterDirection.Output; cmd.Parameters["@addr"].Direction =ParameterDirection.Output; cmd.ExecuteNonQuery(); if (Convert.ToInt32(cmd.Parameters["@RetVal"].Value)==0} console.WriteLine(cmd.Parameters["@name"].Value); else console.WriteLine("name not found"); 在Transaction(事务)中执行查询 eg: cn.open(); OleDbTransaction txn=cn.BeginTransaction(); OleDbCommand cmd = new OleDbCommand(strSQL,cn,txn); int intRecordsAffected=cmd.ExecuteNonQuery(); if( intRecordsAffected==1) { Console.WriteLine("Update succeeded"); txn.Commit(); } else { Console.WriteLine("Update failed"); txn.Rollback(); } insert table_name select column_list from table_list where search_conditions 插入查询到的数据
posted on 2007-08-03 11:49  gerdy  阅读(238)  评论(0编辑  收藏  举报