ADO.NET总结

SQL Server数据库连接。http://www.cnblogs.com/samwu/archive/2011/08/30/2159355.html

DataReader方式的插入数据行,删除数据行,查询数据行,更新数据行。

DataReader手工分页。http://www.cnblogs.com/samwu/archive/2011/06/16/2082313.html

DataReader和DataSet的比较。http://www.cnblogs.com/samwu/archive/2011/09/26/2191723.html

DataAdapter方式的插入数据行,删除数据行,查询数据行,更新数据行。

DataSet的基本使用。http://www.cnblogs.com/samwu/archive/2010/10/13/1850559.html

类型化DataSet。

ADO.NET使用存储过程。http://www.cnblogs.com/samwu/archive/2011/09/19/2181378.html

ADO.NET使用事务。http://www.cnblogs.com/samwu/archive/2011/08/30/2159380.html

ADO.NET连接池。http://www.cnblogs.com/waw/archive/2011/08/29/2158762.html和

http://jingyan.baidu.com/article/a3a3f811a5e2638da2eb8a02.html

 

 

SqlDataSource控件使用。

编写自己的SQLHelper类。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

DataReader方式的插入数据行 :
View Code
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public  partial  class _Default : System.Web.UI.Page
{
     protected  void Page_Load( object sender, EventArgs e)
    {
        

    }
     protected  void Button1_Click( object sender, EventArgs e)
    {
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
         // 建立Command对象
        SqlCommand sqlcommand =  new SqlCommand();
        sqlcommand.Connection = sqlconn;
         // 把SQL语句赋给Command对象
        sqlcommand.CommandText =  " insert into student(no,name,sex,birth,address,photo) values (@no,@name,@sex,@birth,@address,@photo) ";
        sqlcommand.Parameters.AddWithValue( " @no ",TextBox1.Text);    
        sqlcommand.Parameters.AddWithValue( " @name ",TextBox2.Text);    
        sqlcommand.Parameters.AddWithValue( " @sex ",DropDownList1.Text);    
        sqlcommand.Parameters.AddWithValue( " @birth ",TextBox3.Text);    
        sqlcommand.Parameters.AddWithValue( " @address ",TextBox4.Text);    
        sqlcommand.Parameters.AddWithValue( " @photo ",FileUpload1.FileName);    
         try
        {
             // 打开连接
            sqlconn.Open();
             // 执行SQL命令,ExecuteNonQuery();返回值是执行的影响行数
            sqlcommand.ExecuteNonQuery();
             // 把学生的照片上传到网站的“image”文件夹中
             if (FileUpload1.HasFile ==  true)
            {
                FileUpload1.SaveAs(Server.MapPath(( " ~/image/ ") + FileUpload1.FileName));
            }
            Label1.Text =  " 成功增加记录 ";
        }
         catch (Exception ex)
        {
            Label1.Text =  " 错误原因: "+ex.Message;
        }
         finally
        {
            sqlcommand =  null;
            sqlconn.Close();
            sqlconn =  null;
        }
    }
}

 

 

DataReader方式的删除数据行:
View Code
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public  partial  class command : System.Web.UI.Page
{
     protected  void Page_Load( object sender, EventArgs e)
    {
       

    }
     protected  void Button1_Click( object sender, EventArgs e)
    {
         int intDeleteCount;
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
         // 建立Command对象
        SqlCommand sqlcommand =  new SqlCommand();
         // Command对象的属性赋值
        sqlcommand.Connection = sqlconn;
        sqlcommand.CommandText =  " delete from student where no=@no ";
        sqlcommand.Parameters.AddWithValue( " @no ",TextBox1.Text);    
         try
        {
            sqlconn.Open();
            intDeleteCount=sqlcommand.ExecuteNonQuery();
             if (intDeleteCount> 0)
               Label1.Text =  " 成功删除记录 ";
             else
               Label1.Text =  " 该记录不存在 ";
        }  
         catch (Exception ex)
        {
            Label1.Text =  " 错误原因: "+ex.Message;
        }
         finally
        {
            sqlcommand =  null;
            sqlconn.Close();
            sqlconn =  null;
        }
    }
}

 

 

DataReader方式的更新数据行:
View Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public  partial  class _Default : System.Web.UI.Page
{
     protected  void Page_Load( object sender, EventArgs e)
    {

    }
     protected  void Button1_Click( object sender, EventArgs e)
    {
         int intUpdateCount;
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
         // 建立Command对象
        SqlCommand sqlcommand =  new SqlCommand();
        sqlcommand.Connection = sqlconn;
         // 把SQL语句赋给Command对象
        sqlcommand.CommandText =  " update_student ";
         // 说明命令类型为存储过程
        sqlcommand.CommandType = CommandType.StoredProcedure;
        sqlcommand.Parameters.AddWithValue( " @no ", TextBox1.Text);
        sqlcommand.Parameters.AddWithValue( " @name ", TextBox2.Text);
        sqlcommand.Parameters.AddWithValue( " @sex ", DropDownList1.Text);
        sqlcommand.Parameters.AddWithValue( " @birth ", TextBox3.Text);
        sqlcommand.Parameters.AddWithValue( " @address ", TextBox4.Text);
        sqlcommand.Parameters.AddWithValue( " @photo ", FileUpload1.FileName);
         try
        {
             // 打开连接
            sqlconn.Open();
             // 执行SQL命令
            intUpdateCount=sqlcommand.ExecuteNonQuery();
             // 把学生的照片上传到网站的“image”文件夹中
             if (FileUpload1.HasFile ==  true)
            {
                FileUpload1.SaveAs(Server.MapPath(( " ~/image/ ") + FileUpload1.FileName));
            }
             if (intUpdateCount >  0)
                Label1.Text =  " 成功修改记录 ";
             else
                Label1.Text =  " 该记录不存在 ";
        }
         catch (Exception ex)
        {
            Label1.Text =  " 错误原因: " + ex.Message;
        }
         finally
        {
            sqlcommand =  null;
            sqlconn.Close();
            sqlconn =  null;
        }

    }
}

从以上三个例子,可以看出,插入,删除,更新,都一个关键字,ExecuteNonQuery方法,返回的是影响行数。、

可以的话,来个ExecuteScalar 方法。

cmd.CommandText =  " Insert into T_Users(UserName,Password)
output inserted.Id values( ' admin ', ' 888888 ') " ;
int i = Convert.ToInt32(cmd.ExecuteScalar());
得到自动增长字段的主键值,在values关键词前加上output inserted.Id,其中Id为主键字段名。执行结果就试插入的主键值,用ExecuteScalar执行最方便。SqlCommand的ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以返回值是object类型。 

 

DataReader方式的查询数据行:
View Code
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public  partial  class _Default : System.Web.UI.Page 
{
     protected  void Page_Load( object sender, EventArgs e)
    {
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
        
        SqlCommand sqlcommand =  new SqlCommand();
        sqlcommand.Connection = sqlconn;
         // 打开连接
        sqlconn.Open();
         // 建立Command对象
        sqlcommand.CommandText =  " select * from student ";
         // 建立DataReader对象,返回查询结果
        SqlDataReader sqldatareader=sqlcommand.ExecuteReader();
         // 逐行遍历查询结果
         while(sqldatareader.Read()) 
        {
            Label1.Text += sqldatareader.GetString( 0) +  "   ";
            Label1.Text += sqldatareader.GetString( 1) +  "   ";
            Label1.Text += sqldatareader.GetString( 2) +  "   ";
            Label1.Text += sqldatareader.GetDateTime( 3) +  "   ";
            Label1.Text += sqldatareader.GetString( 4) +  "   ";
            Label1.Text += sqldatareader.GetString( 5) +  " <br /> ";
        };
       
        
        sqlcommand =  null;
        sqlconn.Close();
        sqlconn =  null;
    }
}
reader的GetString、GetInt32等方法只接受整数参数,也就是序号,用GetOrdinal方法根据列名动态得到序号。
参数在SQLServer内部不是简单的字符串替换,SQLServer直接用添加的值进行数据比较,因此不会有注入漏洞攻击。

 


 

 

DataAdapter方式的查询数据行
View Code
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public  partial  class adapter2 : System.Web.UI.Page
{
     protected  void Page_Load( object sender, EventArgs e)
    {
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
         // 建立DataSet对象
        DataSet ds =  new DataSet();
         // 建立DataTable对象
        DataTable dtable;
         // 建立DataRowCollection对象
        DataRowCollection coldrow;
         // 建立DataRow对象
        DataRow drow;
         // 打开连接
        sqlconn.Open();
         // 建立DataAdapter对象
        SqlDataAdapter sqld =  new SqlDataAdapter( " select * from student ", sqlconn);
         // 用Fill方法返回的数据,填充DataSet,数据表取名为“tabstudent”
        sqld.Fill(ds,  " tabstudent ");
         // 将数据表tabstudent的数据复制到DataTable对象
        dtable = ds.Tables[ " tabstudent "];
         // 用DataRowCollection对象获取这个数据表的所有数据行
        coldrow = dtable.Rows;
         // 逐行遍历,取出各行的数据
         for ( int inti =  0; inti < coldrow.Count; inti++)
        {
            drow = coldrow[inti];
            Label1.Text +=  " 学号: " + drow[ 0];
            Label1.Text +=  "  姓名: " + drow[ 1];
            Label1.Text +=  "  性别: " + drow[ 2];
            Label1.Text +=  "  出生日期: " + drow[ 3];
            Label1.Text +=  "  地址: " + drow[ 4] +  " <br /> ";
        }
        sqlconn.Close();
        sqlconn =  null;

    }
}

遍历数据行还可以,foreach(DataRow row in dataset.Tables[0].Rows) {row["Name"]}

 

 

DataAdapter方式的更新数据行
View Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public  partial  class _Default : System.Web.UI.Page
{
     protected  void Page_Load( object sender, EventArgs e)
    {

    }
     protected  void Button1_Click( object sender, EventArgs e)
    {
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
         // 建立DataSet对象
        DataSet ds =  new DataSet();
         // 建立DataTable对象
        DataTable dtable;
         // 建立DataRowCollection对象
        
// DataRowCollection coldrow;
        
// 建立DataRow对象
        DataRow drow;
         // 打开连接
        sqlconn.Open();
         // 建立DataAdapter对象
        SqlDataAdapter sqld =  new SqlDataAdapter( " select * from student ", sqlconn);
         // 定义Update命令,其中@NAME,@NO是两个参数
        sqld.UpdateCommand =  new SqlCommand( " UPDATE student SET NAME = @NAME WHERE NO = @NO ", sqlconn);
         // 定义@NAME参数,对应于student表的NAME列
        sqld.UpdateCommand.Parameters.Add( " @NAME ", SqlDbType.VarChar,  50" NAME ");
         // 定义@NO参数,对应于student表的NO列,而且@NO是修改前的原值
        SqlParameter parameter = sqld.UpdateCommand.Parameters.Add( " @NO ", SqlDbType.VarChar,  10);
        parameter.SourceColumn =  " NO ";
        parameter.SourceVersion = DataRowVersion.Original;
         // 用Fill方法返回的数据,填充DataSet,数据表取名为“tabstudent”
        sqld.Fill(ds,  " tabstudent ");
         // 将数据表tabstudent的数据复制到DataTable对象
        dtable = ds.Tables[ " tabstudent "];
         // 用DataRowCollection对象获取这个数据表的所有数据行
        
// coldrow = dtable.Rows;
        
// 修改操作,逐行遍历,取出各行的数据
         for ( int inti =  0; inti < dtable.Rows.Count; inti++)
        {
            drow = dtable.Rows[inti];
             // 给每位学生姓名后加上字母A
            drow[ 1]=drow[ 1]+ " A ";
        }
         // 提交更新
        sqld.Update(ds,  " tabstudent ");
        sqlconn.Close();
        sqlconn =  null;
        Label1.Text =  " 更新成功 ";
    }
   
}

这个例子是自己写的UpdateCommand方法。

 

可以调用SqlDataAdapter的Update方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet、DataTable或者若干DataRow。但是需要为SqlDataAdapter提供DeleteCommand、UpdateCommand、InsertCommand它才知道如何将对DataSet的修改提交到数据库,由于这几个Command要求的格式非常苛刻,因此开发人员自己写非常困难,可以用SqlCommandBuilder自动生成这几个Command,用法很简单:new SqlCommandBuilder(adapter)。查看生成的Command(没有直接赋值给SqlDataAdapter ,看SqlCommandBuilder的)。SqlCommandBuilder要求表必须有主键。
下面这个例子就是SqlCommandBuilder自动生成的InsertCommand方法,也就是DataAdapter方式的插入数据行
View Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public  partial  class _Default : System.Web.UI.Page
{
     protected  void Page_Load( object sender, EventArgs e)
    {

    }
     protected  void Button1_Click( object sender, EventArgs e)
    {
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
         // 建立DataSet对象
        DataSet ds =  new DataSet();
         // 建立DataTable对象
        DataTable dtable;
         // 建立DataRow对象
        DataRow drow;
         // 打开连接
        sqlconn.Open();
         // 建立DataAdapter对象
        SqlDataAdapter sqld =  new SqlDataAdapter( " select * from student ", sqlconn);
         // 建立 CommandBuilder 对象来自动生成 DataAdapter 的 Command 命令,否则就要自己编写
      
// Insertcommand ,deletecommand , updatecommand 命令。
        SqlCommandBuilder cb =  new SqlCommandBuilder(sqld);
         // 用Fill方法返回的数据,填充DataSet,数据表取名为“tabstudent”
        sqld.Fill(ds,  " tabstudent ");
         // 将数据表tabstudent的数据复制到DataTable对象
        dtable = ds.Tables[ " tabstudent "];
         // 增加新记录
        drow = ds.Tables[ " tabstudent "].NewRow();
         // 给该记录赋值
        drow[ 0] =  " 19 ";
        drow[ 1] =  " 陈峰 ";
        drow[ 2] =  " ";
        ds.Tables[ " tabstudent "].Rows.Add(drow);
         // 提交更新
        sqld.Update(ds,  " tabstudent ");
        sqlconn.Close();
        sqlconn =  null;
        Label1.Text =  " 增加成功 ";

    }
}

 

 

DataAdapter方式的删除数据行 
View Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public  partial  class _Default : System.Web.UI.Page
{
     protected  void Page_Load( object sender, EventArgs e)
    {

    }
     protected  void Button1_Click( object sender, EventArgs e)
    {
         string sqlconnstr = ConfigurationManager.ConnectionStrings[ " ConnectionString "].ConnectionString;
        SqlConnection sqlconn =  new SqlConnection(sqlconnstr);
         // 建立DataSet对象
        DataSet ds =  new DataSet();
         // 建立DataTable对象
        DataTable dtable;
         // 建立DataRowCollection对象
        DataRowCollection coldrow;
         // 建立DataRow对象
        DataRow drow;
         // 打开连接
        sqlconn.Open();
         // 建立DataAdapter对象
        SqlDataAdapter sqld =  new SqlDataAdapter( " select * from student ", sqlconn);
         // 建立 CommandBuilder 对象来自动生成 DataAdapter 的 Command 命令,否则就要自己编写
        
// Insertcommand ,deletecommand , updatecommand 命令。
        SqlCommandBuilder cb =  new SqlCommandBuilder(sqld);
         // 用Fill方法返回的数据,填充DataSet,数据表取名为“tabstudent”
        sqld.Fill(ds,  " tabstudent ");
         // 将数据表tabstudent的数据复制到DataTable对象
        dtable = ds.Tables[ " tabstudent "];
         // 用DataRowCollection对象获取这个数据表的所有数据行
        coldrow = dtable.Rows;
         // 逐行遍历,删除符合条件的记录
         for ( int inti =  0; inti < coldrow.Count; inti++)
        {
            drow = coldrow[inti];

             if (drow[ " address "].ToString()==  "")
                drow.Delete();

        }
         // 提交更新
        sqld.Update(ds,  " tabstudent ");
        sqlconn.Close();
        sqlconn =  null;
        Label1.Text =  " 删除成功 ";
    }
}
 

 

 

 

 

 

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