THC ADO.NET

Ado.Net概述

protected   void  Page_Load( object  sender, EventArgs e)
    
{
        
string con = ConfigurationManager.ConnectionStrings["mydbconn"].ToString();
        SqlConnection conn 
= new SqlConnection(con);
        conn.Open();
        SqlCommand cmd 
= new SqlCommand("select 学号,姓名,地址 from test", conn);
        SqlDataReader dr 
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
        
if (dr.HasRows)
        
{
            
while (dr.Read())
            
{
                ListItem li 
= new ListItem(dr.GetString(1), dr.GetString(0));
                DropDownList1.Items.Add(li);
            }

            dr.Close();
        }


    }

1、dr.GetString(1), dr.GetString(0)  获取指定列的字符串的形式dr.GetString(1)=text,dr.GetString(0)=value


SQL语句
1、查询语句

select a,b,c from table_name where a='thc' or b<40 and c<>50 or a like '%XXX%' order by b desc
2、更新语句

update  table_name  set (b = 100 ,c = ' thc ' where  a = ' asp.net '

Ps:1、不能更新主键
     2、如果没有制定where语句,那么将更新所有行的数据
     3、如果插入非数列指定的类型,将不会执行命令并返回错误,如将文字插入到int类型列中
     4、插入到nvarchar数据类型的列中的数据将被删除所有尾随空格
3、添加新记录

insert   into  table_name(a,b,c)  values ( ' 吴有鋆 ' , 100 , ' www.tiger9.com ' )
insert   into  table_name  values ( ' 吴有鋆 ' , 100 , ' www.tiger9.com ' )

Ps:1、如果要替换现有的数据,必须先删除或者改掉
     2、每个列名在字符串中只能出现一次
     3、如果省略列名,则默认从按照列的序号升序依次填充数据
     4、如果列名提供了三个,而值提供了四个,那么除非该列有默认值或者具有自动增量,否则会出错,如果列允许空值,那不提交数据也没关系
     5、如果列列表和值列表不对应,显示指定列和值的对应关系
4、删除记录

delect  from  table_name  where  a = "吴有鋆"

Ps:1、如果没有指定条件,将删除所有的行
     2、如果指定了条件,那么所有符合条件的行都将被删除
     3、如果目标数据行任意一行违反了FOREIGN KEY约束,删除失败
5、联合查询
   内部联接:内部联接包括同等联接和自然联接
   外部联接:外部联接可以是左向外部联接、右向外部联接或完全外部联接
   在From子句中可以用下列某一组关键字来指定外部联接:
           LEFT JOIN 或 LEFT OUTER JOIN(左联接)
                   左边有数据右边没有的,右边用空格代替,右边有数据的,左边没有,直接不显示
           RIHGT JOIN 或 RIGHT OUTER JOIN(右联接)、
                   右边有数据左边没有的,左边用空格代替,左边有数据的,右边没有,直接不显示
           FULL JOIN 或 FULL OURER JOIN(完全外部联接)
                   左边有数据右边没有的,右边用空格代替右边有数据左边没有的,左边用空格代替

  

ObjectDataScors对象

    注意事项  1、Updata时参数名必须与查询数据的参数名,数据库字段名相同

                  2、Delete时数据控件必须设置主键

                  3、Updata防止用户输入',出错

 

 

sqlcmd.CommandText  =  " update  Scontact  set   [ Name ] = @Name , [ Address ] = ' " + Address + " '   where   [ ID ] = ' " + ID + " ' ";
sqlcmd.Parameters.AddWithValue("
@Name ", Name);

   //用@Name替代字符串,使用sqlcmd.Parameters.AddWithValue将两者建立连接

 

Cammand重点加固

    属性方面的

    1、CommandText

    注释:指定该属性将使用的SQL查询语句或者存储过程名称(字符串类型)

    2、CommandType

    注释:指定解释CommandText属性的值,默认为Text(枚举类型)

    3、Connetion

    注释:指定Command的此使用的Connection

    4、Parameters

    注释:获取与Command有关的所有参数以及它们各自到DataSet列的映射

    方法方面的

    5、Cancel

    注释:试图取消Command的执行

    6、Dispose

    注释:释放由Component占用的资源

    7、ExecuteNonQuery

    注释:执行命令并且返回受影响的行数(返回int类型)

    8、ExecuteReader

    注释:返回一个只读且只进的这么一个数据流,每次只返回一条数据(返回对象类型)

    9、ExecuteScalar

    注释:执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他列或行

 

动态新建内存表(DataSet)

   

            DataSet ds  =   new  DataSet( " one " );     
            DataTable Udt 
=   new  DataTable( " user " );   //user表名
            DataTable Bdt 
=   new  DataTable( " book " );  //book表名
            ds.Tables.Add(Udt);     //添加到表
            ds.Tables.Add(Bdt);

            Udt.Columns.Add(
" dc_id " typeof (Int32));
            Udt.Columns.Add(
" name " typeof ( string ));
            Udt.Columns.Add(
" age " typeof (Int32));

            Bdt.Columns.Add(
" title " , typeof ( string ));
            Bdt.Columns.Add(
" url " typeof ( string ));
            Bdt.Columns.Add(
" dc_id " typeof (Int32));
            

            
object [] udt_d  =   new   object [ 3 ];    //实例化对象数组
            
object [] bdt_d  =   new   object [ 3 ];

            udt_d[
0 =   1 ;
            udt_d[
1 =   " 吴有鋆 " ;
            udt_d[
2 =   28 ;

            bdt_d[
0 =   " 钢铁是怎样练成的 " ;
            bdt_d[
1 =   " www.qq.com " ;
            bdt_d[
2 =   1 ;

            Udt.Rows.Add(udt_d);   //将数据添加到表行
            Bdt.Rows.Add(bdt_d);

 

定义表的主键

UniqueConstraint uc  =   new  UniqueConstraint( " uthc " , ds.Tables[ " user " ].Columns[ " dc_id " ],true);
        ds.Tables[
" user " ].Constraints.Add(uc);

PS:  1、UniqueConstraint   主键

       2、"uthc"  约束的名称

       3、ds.Tables["user"].Columns["dc_id"]  约束的列

       4、True   表示约束为主键,如果无true,约束的列的数据不能重复,但不约束为主键

       5、Constraints    该表约束的集合

 

定义表的外键(外键约束) 

 ForeignKeyConstraint fkc = new  ForeignKeyConstraint( " fthc " ,ds.Tables["user"].Columns["dc_id"],ds.Tables["book"].Columns["dc_id"] );
 ds.Tables[
" book " ].Constraints.Add(fkc);

PS:  1、ForeignKeyConstraint   外键

       2、"fthc"  外键约束名

       3、ds.Tables["user"].Columns["dc_id"]    约束中的父级

       4、ds.Tables["book"].Columns["dc_id"]   约束中的子级

       5、ds.Tables["book"].Constraints.Add(fkc)     外键约束添加到子级

ds.Relations.Add( " fck_au " , ds.Tables[ " ta " ].Columns[ " id " ], ds.Tables[ " tb " ].Columns[ " id " ]);

PS:1、外键约束的另一种方式

       2、Relations  链接起来父表与子表关系的集合

 

外键约束删除数据

DataSet ds  =  (DataSet)Session[ " ds " ];
string  key  =  GridView1.DataKeys[e.RowIndex].Value.ToString();
DataRow dr
= ds.Tables[ " ta " ].Rows.Find(key);
ds.Tables[
" ta " ].Rows.Remove(dr);  //移除数据行

PS: 1、DataKeys[e.RowIndex].Value   e.RowIndex行的主键的值 

      2、ds.Tables["ta"].Rows.Find(key)      Find获取由主键值指定的行

 

合并数据(DataSet)

ds.Tables[ " t1 " ].Merge(ds.Tables[ " t2 " ]);
GridView1.DataSource 
=  ds.Tables[ " t1 " ];
GridView1.DataBind();

PS:   1、Merge  合并数据表

        2、两个表的列名相同(区分大小写)只保留一个(ID,ID true)(ID,id false)

 

将数据表写入缓存提高系统性能

 cds.ExtendedProperties.Add( " ad_t1 " , DateTime.Now.ToLongTimeString());
                Cache.Insert(
" ds_cache " , cds,  null , DateTime.Now.AddMinutes( 2 ), TimeSpan.Zero);

PS:  1、"ds_cache"    缓存名称

       2、cds    插入缓存的对象名称

       3、null    对象依赖于某个项,不依赖为null,如果依赖于某个项,依赖项更改时,该对象即无效,并移除缓存

       4、DateTime.Now.AddMinutes(2)    添加缓存过期时间

       5、TimeSpan.Zero   间隔时间(最后一次访问后,多久自动移除缓存)

 

移除缓存

 Cache.Remove( " ds_cache " );

 

存储过程

  public  DataTable Tdt()
    
{
        Tsda.SelectCommand 
= new SqlCommand("Myselect", Tconn);
        Tsda.SelectCommand.CommandType 
= CommandType.StoredProcedure;
        Tsda.Fill(Tds, 
"Student");
        
return Tds.Tables["Student"];
    }

PS:     Tsda.SelectCommand = new SqlCommand("Myselect", Tconn);   //Myselect存储过程名称
        Tsda.SelectCommand.CommandType 
= CommandType.StoredProcedure;  //Command类型为存储过程

 PS:  Tcmd.Parameters.AddWithValue("@id",ID);   //Tcmd存储过程的Parameter(参数)添加对应的值或对象

public   void  Update( string  ID,  string  Name,  string  Phone)
    
{
        Tcmd.CommandText 
= "MyUpdate";
        Tcmd.CommandType 
= CommandType.StoredProcedure;
        Tcmd.Parameters.AddWithValue(
"@id",ID);
        Tcmd.Parameters.AddWithValue(
"@name", Name);
        Tcmd.Parameters.AddWithValue(
"@phone", Phone);
        Tcmd.Parameters.AddWithValue(
"@Original_id",ID);
        Tcmd.Connection 
= Tconn;
        
 }

 

 

ALTER PROCEDURE dbo.MyUpdate
(
    @ID nvarchar(
10 ),
    @Name nvarchar(
4 ),
    @phone 
float ,
    @Original_ID nvarchar(
10 )
)
AS
    SET NOCOUNT OFF;
UPDATE [Scontact] SET [ID] 
=  @ID, [Name]  =  @Name, [phone]  =  @phone WHERE (([ID]  =  @Original_ID));
    
SELECT ID, Name, phone FROM Scontact WHERE (ID 
=  @ID)

 

可移植数据访问程序

Web.config添加一段配置节

< appSettings >
    
< add key = " dbType "  value = " SqlServer " />
    
<!-- 这里可选值必须是SqlServer或者Access在或者Oracle -->
  
</ appSettings >

 

调用获取其值

ConfigurationSettings.AppSettings[ " dbType " ]

 

数据库连接

SQL Server

< add name = " mydbconn "  connectionString = " Data Source=.;Initial Catalog=mydb;Persist Security Info=True;User ID=sa;Password=123 "
   providerName
= " System.Data.SqlClient "   />

<add name="数据库连接名称" connectionString="Data Source=数据源;Initial Catalog=数据库名称 Persist Security Info(持续性安全信息)=true;User ID=用户名;Password=密码"  providerName(数据提供程序名称)="命名空间" />

 

Access

   < add name = " mystudent "  connectionString = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Projects\THC ADO\Student.mdb "
   providerName
= " System.Data.OleDb "   />

<add name="数据库连接名称" connectionString="Provider=数据提供程序;Data Source=数据库文件" providerName(数据提供程序名称)="命名空间" />

 

Enum.Parse 方法 (Type, String)

1:将字符串型转化为(Enum)枚举类型。
例如:现在有个字符串sString,一个枚举EnumName,希望把String类型转换成EnumName类型格式如下:

(EnumName)EnumName.Parse( typeof (EnumName),String)

实例:

 

 

  public   enum  Week
    { 
         星期一,星期二,星期三
    }
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        Response.Write((Week)Enum.Parse(
typeof (Week), " 2 " ));   // 运行结果为"星期三"  Week枚举数据类型
        lblMeg.Text = ((Week)Enum.Parse( typeof (Week),  " 星期二 " )).ToString();   // 运行结果为"星期二"  Week枚举数据类型转换为字符串
    }

 

IDbConnection,IDbCommand,IDbDataAdapter

1、IDbconnection      可以存储多种数据提供程序的Connection

2、IDbCommand       可以存储多种数据提供程序的Command     

3、IDbDataAdapter   可以存储多种数据提供程序的DataAdapter

你可能感兴趣的:(.net)