zoukankan      html  css  js  c++  java
  • ADO.NET数据库操作

    一、连接数据库

    关于SqlConnection类,MSDN中有详细解释:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.aspx

    (1)直接在VS中创建数据库

     static void Main(string[] args)
            {
                string dataDir = AppDomain.CurrentDomain.BaseDirectory;
                if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
                {
                    dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                    AppDomain.CurrentDomain.SetData("Data Directory", dataDir);
                }
                SqlConnection conn = new SqlConnection(@"Data source=.\SQLEXPRESS;
                      AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True");
                conn.Open();
                Console.WriteLine("数据库连接成功");
                Console.ReadLine();
            }

    (2)连接到SQL Server上

    string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
     SqlConnection myConn = new SqlConnection();
    myConn.Open();

    二、与数据库交互
    (1)使用SqlCommand提交命令

    SqlCommand类在MSDN中的解释:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.aspx

     using(SqlConnection myConn=new SqlConnection(connectionText))
                {
                    myConn.Open();
                    string updateCmdText = "update student set stuName='"+txtStuName.Text.Trim()+"' where stuNumber='"+txtStuNumber.Text.Trim()+"'";
                    SqlCommand cmd = new SqlCommand(updateCmdText,myConn);
                    //如果不添加 cmd.ExecuteNonQuery();好像提交不到数据库中,查查为什么!
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("更新成功!");
                }

    (2)使用DataAdapter提交命令

    SqlDataAdapter类在MSDN中的解释:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldataadapter.aspx

    private static DataSet SelectRows(DataSet dataset,
        string connectionString,string queryString) 
    {
        using (SqlConnection connection = 
            new SqlConnection(connectionString))
        {
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand(
                queryString, connection);
            adapter.Fill(dataset);
            return dataset;
        }
    }

    其中SqlDataAdapter包含有:SelectCommand、InsertCommand、DeleteCommand、Fill
    三、管理内存数据

      当完成对数据库的查询后,需要把所获得的数据保留下来,ADO.NET使用数据集对象在内存中缓存结果数据。

    (1)使用DataTable实现内存表

    DataTable在MSDN中的解释:http://msdn.microsoft.com/zh-cn/library/system.data.datatable.aspx

    DataTable:数据表

    DataCloumn:数据列

    DataRow:数据行

    Constraint:约束

    DataRelation:关系

     private void btnCreateAndShow_Click(object sender, EventArgs e)
            {
                //首先声明一个DataTable
                DataTable myDT = new DataTable("StudentInfo");
    
                //生成学号列,并放入DataTable中
                DataColumn myDCStuNumber = new DataColumn();
                //设置学号列的数据类型Int32
                myDCStuNumber.DataType = System.Type.GetType("System.Int32");
                //设置学号的列名为学号
                myDCStuNumber.ColumnName = "学号";
                myDT.Columns.Add(myDCStuNumber);
    
                //生成姓名列,并放入DataTable中
                DataColumn myDTStuName = new DataColumn();
                //设置姓名列的数据类型为String类型
                myDTStuName.DataType = System.Type.GetType("System.String");
                //设置姓名列的列名为姓名
                myDTStuName.ColumnName = "姓名";
                myDT.Columns.Add(myDTStuName);
    
                //设置学号列作为DataTable主键
                DataColumn [] PrimaryKeyColumns=new DataColumn[1];
                PrimaryKeyColumns[0]=myDT.Columns["学号"];
                myDT.PrimaryKey = PrimaryKeyColumns;
                
                //向DataTable中插入数据
                DataRow myDR1 = myDT.NewRow();
                myDR1["学号"] = 2010181001;
                myDR1["姓名"] = "春天";
                myDT.Rows.Add(myDR1);
    
                DataRow myDR2 = myDT.NewRow();
                myDR2["学号"] = 2010181002;
                myDR2["姓名"] = "夏天";
                myDT.Rows.Add(myDR2);
    
                DataRow myDR3 = myDT.NewRow();
                myDR3["学号"] = 2010181003;
                myDR3["姓名"] = "秋天天";
                myDT.Rows.Add(myDR3);
    
    
                DataRow myDR4 = myDT.NewRow();
                myDR4["学号"] = 2010181004;
                myDR4["姓名"] = "冬天";
                myDT.Rows.Add(myDR4);
    
                //显示DataTable中的数据
                this.dataGridView1.DataSource = myDT;
            }

    (2)使用DataSet管理数据

    如果内存表DataTable对应的是数据库的表,那么DataSet对象则对应整个数据库。

    DataSet是从数据源中检索到的数据在内存中的缓存,可以包含多个DataTable对象。

    DataSet在MSDN中的解释:http://msdn.microsoft.com/zh-cn/library/system.data.dataset.aspx

    <1>合并DataSet中的内容(Merge方法)

      private void Form1_Load(object sender, EventArgs e)
            {
                //连接数据库
                string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
                using(SqlConnection myConn=new SqlConnection(connectionText))
                {
                    //创建两个DataSet对象
                    DataSet ds1 = new DataSet();
                    DataSet ds2 = new DataSet();
                    //创建一个SqlDataReader对象
                    string sqlText1 = "select * from student";
                    SqlDataAdapter sda1 = new SqlDataAdapter(sqlText1,myConn);
                    //使用Fill()方法填充DataSet对象
                    sda1.Fill(ds1);
                    //创建第二个SqlDataReader对象
                    string sqlText2 = "select * from employee";
                    SqlDataAdapter sda2 = new SqlDataAdapter(sqlText2,myConn);
                    sda2.Fill(ds2);
                    ds1.Merge(ds2,true,MissingSchemaAction.AddWithKey);
                    dataGridView1.DataSource=ds1.Tables[0];
                }
            }

    <2>复制DataSet中的内容(Copy)

    DataSet myDS;
            private void btnShow_Click(object sender, EventArgs e)
            {
                //创建到数据库的连接
                string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
                using(SqlConnection myConn=new SqlConnection(connectionText))
                {
                    //查询语句
                    string selectText = "select * from Employee";
                    //创建一个SqlDataAdapter对象
                    SqlDataAdapter mySDA = new SqlDataAdapter(selectText,myConn);
                    //创建一个DataSet对象
                    myDS = new DataSet();
                    //使用Fill方法填充DataSet对象
                    mySDA.Fill(myDS);
                    //设置dataGridView的数据源
                    dataGridView1.DataSource=myDS.Tables[0];
    
                }
            }
    
            private void btnCopy_Click(object sender, EventArgs e)
            {
                DataSet myDS2 = myDS.Copy();
                dataGridView2.DataSource=myDS2.Tables[0];
            }

    注:DataSet中可以复制到的内容有:
    1>创建DataSet的原样副本(其中包含架构、数据、行状态信息和行版本)

    2>创建包含现有的DataSet的架构,但仅包含已修改行的DataSet

    3>仅复制DataSet的架构(即关系结构)

    例如:Copy()方法就是一个深拷贝方法,深拷贝复制原对象的所有成员,对于引用类型成员亦复制其所指的堆上的对象。

            浅拷贝创建原对象类型的一个新实例,复制原对象的所有值类型数据

            Clone()方法只拷贝DataTable的结构(不包含数据)

    (3)使用DataReader获取只读数据

    SqlDataReader在MSDN中的解释:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldatareader.aspx

    static void Main()
        {
            string str = "Data Source=(local);Initial Catalog=Northwind;"
                + "Integrated Security=SSPI";
            ReadOrderData(str);
        }
    
        private static void ReadOrderData(string connectionString)
        {
            string queryString =
                "SELECT OrderID, CustomerID FROM dbo.Orders;";
    
            using (SqlConnection connection =
                       new SqlConnection(connectionString))
            {
                SqlCommand command =
                    new SqlCommand(queryString, connection);
                connection.Open();
    
                SqlDataReader reader = command.ExecuteReader();
    
                // Call Read before accessing data.
                while (reader.Read())
                {
                    ReadSingleRow((IDataRecord)reader);
                }
    
                // Call Close when done reading.
                reader.Close();
            }
        }
    
        private static void ReadSingleRow(IDataRecord record)
        {
            Console.WriteLine(String.Format("{0}, {1}", record[0], record[1]));
        }

    三、数据绑定

    数据绑定:指系统在运行时自动将数据赋予控件的技术。

    .NET中绑定技术包括两种方式:

    (1)绑定数据到单值控件。单值控件可以一次显示一个数据值,包括TextBox、Label等。

    (2)绑定数据到多值控件。多值控件可以同时显示一个或多个数据记录,包括列表控件ListBox、CheckBoxList、ComboBox等,复合绑定控件DataGridView、ListView等。

    绑定到ComboxBox

     private void Form1_Load(object sender, EventArgs e)
            {
                TestData();
            }
            public void TestData()
            {
                string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
                using(SqlConnection myConn=new SqlConnection(connectionText))
                {
                    if(myConn.State==ConnectionState.Closed)
                    {
                        myConn.Open();
                    }
                    //使用SqlCommand提交查询命令
                    SqlCommand myCmd = new SqlCommand("select * from student",myConn);
                    //获取数据适配器
                    SqlDataAdapter mySDA = new SqlDataAdapter();
                    mySDA.SelectCommand = myCmd;
                    //填充DataSet
                    DataSet myDS = new DataSet();
                    mySDA.Fill(myDS);
                    //将DataSet对象上的数据绑定到ComboxBox
                    //cmbDataShow.DisplayMember = "stuNumber";
                    cmbDataShow.ValueMember = "stuName";
                    cmbDataShow.DataSource = myDS.Tables[0].DefaultView;
                    //断开连接
                    myConn.Close();
                }
            }

    绑定到ListBox上

     string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
                 using (SqlConnection myConn = new SqlConnection(connectionText))
                 {
                     if (myConn.State == ConnectionState.Closed)
                     {
                         myConn.Open();
                     }
                     //使用SqlCommand提交查询命令
                     SqlCommand myCmd = new SqlCommand("select * from student", myConn);
                     //获取数据适配器
                     SqlDataAdapter mySDA = new SqlDataAdapter();
                     mySDA.SelectCommand = myCmd;
                     SqlDataReader mySDR = myCmd.ExecuteReader();
                     while(mySDR.Read())
                     {
                         listBox1.Items.Add(mySDR[1].ToString());
                     }
                     myConn.Close();
                 }

    绑定到ListView上

     string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
                 using (SqlConnection myConn = new SqlConnection(connectionText))
                 {
                     if (myConn.State == ConnectionState.Closed)
                     {
                         myConn.Open();
                     }
                     //使用SqlCommand提交查询命令
                     SqlCommand myCmd = new SqlCommand("select * from student", myConn);
                     //获取数据适配器
                     SqlDataAdapter mySDA = new SqlDataAdapter();
                     mySDA.SelectCommand = myCmd;
                     SqlDataReader mySDR = myCmd.ExecuteReader();
                     while(mySDR.Read())
                     {
                         listBox1.Items.Add(mySDR[1].ToString());
                     }
                     myConn.Close();
                 }

    将数据绑定到ListView

    string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
                using (SqlConnection myConn = new SqlConnection(connectionText))
                {
                    if (myConn.State == ConnectionState.Closed)
                    {
                        myConn.Open();
                    }
                    //使用SqlCommand提交查询命令
                    SqlCommand myCmd = new SqlCommand("select * from student", myConn);
                    SqlDataReader mySDR = myCmd.ExecuteReader();
                    listView1.View = View.Details;
                    listView1.FullRowSelect = true;
                    while (mySDR.Read())
                    {
                        ListViewItem myLVI = new ListViewItem(mySDR[0].ToString());
                        myLVI.SubItems.Add(mySDR[1].ToString());
                        listView1.Items.Add(myLVI);
                    }
                    myConn.Close();
                }

    将数据绑定到DataGridView中

    string connectionText = "Data Source=(local);Database=testDB;Integrated Security=true";
            private void btnPresent_Click(object sender, EventArgs e)
            {
                using(SqlConnection myConn=new SqlConnection(connectionText))
                {
                    if(myConn.State==ConnectionState.Closed)
                    {
                        myConn.Open();
                    }
                    //查询字符串
                    string selectCommandText = "select * from student where stuNumber=' "+txtStuNumber.Text.Trim()+"'";
                    //根据连接对象和SQL语句创建SqlCommand对象
                    SqlCommand myComd = new SqlCommand(selectCommandText,myConn);
                    //使用Command对象创建SqlDataReader对象
                    SqlDataAdapter sda = new SqlDataAdapter(selectCommandText,myConn);
                    DataSet ds = new DataSet();
                    sda.Fill(ds,"student");
                    dgvShow.DataSource=ds.Tables[0];
                    
                }

    实例:
    http://www.cnblogs.com/chenyongblog/archive/2013/03/13/chenyongblog.html

  • 相关阅读:
    java编程思想概括(第二章)一切都是对象
    java编程思想概括(第六章)复用类
    .net程序在无.net环境下运行
    一个让人哭笑不得的触发器
    iReaper for android
    博易博客删除垃圾评论
    解决博易2.0版分页问题
    允许更新此预编译站点的作用
    java包的命名规则技巧
    简易拨号器iCall
  • 原文地址:https://www.cnblogs.com/chenyongblog/p/2979764.html
Copyright © 2011-2022 走看看