• 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 = "删除成功";
        }
    }
     

    合乎自然而生生不息。。。
  • 相关阅读:
    (转)iOS7界面设计规范(2)
    (转)iOS7界面设计规范(1)
    (转)iOS7人机界面设计规范
    (转)iOS Wow体验
    (转)iOS Wow体验
    (转)iOS Wow体验
    (转)iOS Wow体验
    bzoj1044木棍分割
    bzoj1690开关灯
    终于开了blog了。。
  • 原文地址:https://www.cnblogs.com/samwu/p/2190500.html
Copyright © 2020-2023  润新知