天天看點

原始的資料庫通路 ADO.net通路技術ADO.net資料庫通路技術基礎知識

ADO.net資料庫通路技術基礎知識

資料庫操作基礎

(一)資料庫連接配接語句

connstring 連接配接字元串

屬性 具體說明
Data Source 資料源 即 伺服器名稱
Initial 最初的
Catalog 目錄
Initial Catalog 最初的目錄 表示資料庫名稱
User ID 使用者ID表示使用者名稱
Password 密碼
Server和Data Source 可以互換 都表示伺服器名稱
database和Initial Catalog 可以互換 都表示資料庫名稱
Persist Security Info 表示是否儲存安全資訊

資料庫最基本的連接配接語句為:

ConnectString=“Data Source=伺服器名稱 ;Initial Catalog=資料庫名稱;User ID=使用者名稱;Password=使用者密碼”

Server和Data Source 互換

database和Initial Catalog 互換

例如:

name="SqlServerDbContext" connectionString="Server=.;database=FZBIMS_SQ_V3;User ID=sa;pwd=XXXXXXX;App=EntityFramework;" providerName="System.Data.SqlClient"

Provider 供應商 用于指定哪一類資料庫(資料源),可以為 SQLServer,MICROSOF ODBCfor Oracle、Micrsoft Access。(可以不用寫)

Persist 堅持 Security 安全 Info 資訊

Persist Security Info屬性的意思是表示是否儲存安全資訊,其實可以簡單的了解為"ADO在資料庫連接配接成功後是否儲存密碼資訊",

True表示儲存,False表示不儲存

資料庫連接配接前

ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=XX;Data Source=.;Persist Security Info=false"

資料庫連接配接成功後

ConnectString="Provider=MSDAORA.1;User ID=XX;Data Source=."

資料庫連接配接前

ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=XX;Data Source=.;Persist Security Info=true"

資料庫連接配接成功後

ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=xx;Data Source=."

ADO.net核心對象一 Connection(連接配接)對象

SqlConnection 用于建立與特定資料源的連接配接;

using System.Data.SqlClient;

 class DataBase
    {
        SqlConnection conn;
        private string ConnStr = "Data Source=.;Initial Catalog=MyStudent;User ID=sa;Password=68501507";//連接配接字元串
		/// <summary>
        /// 初始化連接配接對象
        /// </summary>
		public SqlConnection DataSqlConn()
        {
            //1、Connection (連接配接)對象方法
            // 方法1、SqlConnection connection = new SqlConnection(ConnStr);
            //方法2、
            conn = new SqlConnection(ConnStr);
            return conn;
        }
    }
           

ADO.net核心對象二 Command(指令)對象

SqlCommand的常用屬性

CommandType = CommandType.Text;

//CommandType的屬性設定Text表示執行SQL語句;CommandType的屬性設定StoredProcedure表示執行儲存過程;

CommandText = "delete * from Student where Sno =95004";

//CommandText屬性:設定需要執行的SQL語句或着儲存過程名;

Connection = DataSqlConn();

//設定或擷取SqlCommand的連接配接對象("

DataSqlConn()是我自定義的方法

")

commandb.

Parameters

屬性 :取得參數值集合;

/// <summary>
        /// 指令對象
        /// </summary>
        /// <returns></returns>
        public SqlCommand DataSql_Command()
        {
            //1、SqlCommand (指令)對象方法
            SqlCommand commandb = new SqlCommand();//初始化一個SqlCommand 對象 
            commandb.CommandType = CommandType.Text;//設定為執行SQL語句;
            commandb.CommandText = "select * from Student where Sno [email protected]";//設定需要執行的SQL語句;
            commandb.Connection = DataSqlConn();//設定或擷取SqlCommand的連接配接對象
            commandb.Parameters.AddWithValue("@ID", 95001);

            //2、SqlCommand (指令)對象方法
            //String SqlStr = "delete from Student where Sno =95003";//設定需要執行的SQL語句;
            // SqlCommand commandb = new SqlCommand(SqlStr, DataSqlConn());//初始化一個SqlCommand 對象 

            //執行SQL語句并傳回資料庫受影響的行數
            commandb.ExecuteNonQuery();

            //删除對象,關閉連接配接
            //commandb = null;
            //conn.Close();
            //conn = null;
            
            return commandb;
        }
           
SqlCommand的常用方法

ExecuteNonQuery() —— 執行指令,傳回值是受影響的記錄行數。

ExecuteReader() —— 執行指令,傳回一個類型化的SqlDataReader對象。該對象可以讀取查詢所得資料。

ExecuteScalar() —— 執行指令,傳回結果集中的第一行第一列的值。

不要忘記

對資料庫操作完畢後關閉資料庫連接配接:conn.Close();

ADO.net核心對象三 DataReader(資料讀取)對象

屬性 具體說明
FieldCount 擷取目前行中的列數
IsClosed 判斷DataReader對象是否關閉
HasRows 如果DataReader中包含一行或者多行者為true,否者為false。
public void SqlDataReaderMothod()
        {
            // 調用指令對象
            SqlCommand command = DataSql_Command();
            //使用command.ExecuteReader();生成DataReader執行個體
            SqlDataReader dataReader = command.ExecuteReader();
            //循環輸出
            while (dataReader.Read())
            {
                Console.WriteLine(dataReader["Sno"]);
            }
            Console.Read();
            dataReader.Close();
        }
           

ADO.net核心對象四 DataAdapter(擴充卡)對象

DataAdapter對象的主要屬性與方法:

屬性 具體說明
SelectCommand 從資料庫檢查資料的Command對象
InsertCommand 向資料源插入資料的Command對象
UpdateCommand 向資料庫更新資料的Command對象
DeleteCommand 從資料庫删除資料的Command對象
方法
Fill 向DataSet中的表填充資料
Update 向DataSet或者DataTable對象中變化的資料更新到資料庫中

DataAdapter對象主要充當DataSet/DataTable與資料源的之間的橋梁,輔助功能。

(主要是資料的插入、更新、删除)。

ADO.net核心對象 SqlCommandBuilder(生成器)對象

public void CommandBuilderMothod()
        {
            //第一步:擷取資料庫配置資訊
            String connStr = "Data Source=.;Initial Catalog=MyStudent;User ID=sa;Password=********";
            //第二步:建構SqlCommand查詢語句
            SqlCommand command = new SqlCommand("select * from student;");
            command.Connection = new SqlConnection(connStr);
            //第三步:建立SqlDataAdapter
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            //第四步:建立DataSet和DataTable
            DataSet dataSet = new DataSet();
            DataTable dataTable = new DataTable();
            //第五步:填充資料
            adapter.Fill(dataTable);
            dataSet.Tables.Add(dataTable);
            //修改第一行資料中的姓名為陳語,并将其性别改為女
            dataTable.Rows[1]["sname"] = "陳語";
            dataTable.Rows[1]["ssex"] = "女";
            //删除第三行資料
            dataTable.Rows[0].Delete();
            //建構一個新的行,并添加到表中去
            dataTable.Rows.Add(new object[] {95008, "小明",  "男",18 });

            //建立SqlCommandBuilder對象,并綁定一個SqlDataAdapter對象
            SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
            //或者
            //SqlCommandBuilder builder = new SqlCommandBuilder();
           // builder.DataAdapter = dataAdapter;

            //列印輸出SqlCommandBuilder對象的增删改sql指令語句
            Console.WriteLine("SqlCommandBuilder執行個體的Insert指令: " + scb.GetInsertCommand().CommandText);
            Console.WriteLine("SqlCommandBuilder執行個體的Delete指令: " + scb.GetDeleteCommand().CommandText);

            //将有變動的行同步到資料庫中
            var dd = dataTable.GetChanges();//檢視受影響的資料行
            adapter.Update(dataTable.GetChanges());
            //儲存修改
            dataTable.AcceptChanges();
            //下面是一個周遊輸出datatable中的資料
            foreach (DataTable table in dataSet.Tables)
            {
                foreach (DataRow row in table.Rows)
                {
                    Console.WriteLine(row[0] + ", " + row[1] + ", " + row[2] );//+ ", " + row[3]
                }
            }
        }
           

DataSet對象與DataTable對象

DataSet對象與DataTable對象自行查找

這裡就不寫了啦

DataSet對象常見方法

屬性 具體說明
SelectCommand 從資料庫檢查資料的Command對象
InsertCommand 向資料源插入資料的Command對象
UpdateCommand 向資料庫更新資料的Command對象
DeleteCommand 從資料庫删除資料的Command對象

總體示範代碼檢視

namespace StudentTest.DB
{
    class DataBase
    {
        SqlConnection conn;
        private string ConnStr = "Data Source=.;Initial Catalog=MyStudent;User ID=sa;Password=68501507"; //連接配接字元串

        /// <summary>
        /// 初始化連接配接對象
        /// </summary>
        public SqlConnection DataSqlConn()
        {
            //1、Connection (連接配接)對象方法
            // 方法1、SqlConnection connection = new SqlConnection(ConnStr);
            //方法2、
            conn = new SqlConnection(ConnStr);
            conn.Open();
            return conn;
        }
        /// <summary>
        /// 指令對象
        /// </summary>
        /// <returns></returns>
        public SqlCommand DataSql_Command()
        {
            //1、SqlCommand (指令)對象方法
            SqlCommand commandb = new SqlCommand();//初始化一個SqlCommand 對象 
            commandb.CommandType = CommandType.Text;//設定為執行SQL語句;
            commandb.CommandText = "select * from Student where Sno [email protected]";//設定需要執行的SQL語句;
            commandb.Connection = DataSqlConn();//設定或擷取SqlCommand的連接配接對象
            commandb.Parameters.AddWithValue("@ID", 95001);

            //2、SqlCommand (指令)對象方法
            //String SqlStr = "delete from Student where Sno =95003";//設定需要執行的SQL語句;
            // SqlCommand commandb = new SqlCommand(SqlStr, DataSqlConn());//初始化一個SqlCommand 對象 

            //執行SQL語句并傳回資料庫受影響的行數
            commandb.ExecuteNonQuery();

            //删除對象,關閉連接配接
            //commandb = null;
            //conn.Close();
            //conn = null;
            
            return commandb;
        }
        /// <summary>
        /// 擴充卡對象
        /// </summary>
        /// <returns></returns>
        public SqlDataAdapter DataAdapterMothod()
        {
            //SQL語句
            // string StrSql = "select * from Student where Sno =95001";

            //建立DataAdapter(擴充卡)對象
            //SqlDataAdapter dataAdapter = new SqlDataAdapter(StrSql, DataSqlConn());
            //建立DataAdapter(擴充卡)對象 方法二
            SqlDataAdapter dataAdapter = new SqlDataAdapter();
            dataAdapter.SelectCommand = DataSql_Command();
            //dataAdapter.UpdateCommand
            return dataAdapter;
        }

        public void DataSetMothod()
        {
            //建立DataSet對象 (DataSet對象是以XML格式的資料在記憶體中的駐留)
            DataSet ds = new DataSet();
            
            //調用SqlDataAdapter對象
            var adapter = DataAdapterMothod();//DataAdapterMothod()是自定義的一個擷取SqlDataAdapter對象的方法;
            //填充資料到DataSet對象 
            adapter.Fill(ds);
            conn.Close();
        }
        public void CommandBuilderMothod()
        {
            //擷取SqlDataAdapter 對象
            SqlDataAdapter dataAdapter = DataAdapterMothod();
            //建立指令生成器
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
            
        }
        public void SqlDataReaderMothod()
        {
            // 調用指令對象
            SqlCommand command = DataSql_Command();
            //使用command.ExecuteReader();生成DataReader執行個體
            SqlDataReader dataReader = command.ExecuteReader();
            //循環輸出
            while (dataReader.Read())
            {
                Console.WriteLine(dataReader["Sno"]);
            }
            Console.Read();
            dataReader.Close();
        }
        public void DataTableOrDataSet()
        {
            DataSet ds = new DataSet();

            DataTable dt = new DataTable();
            //建立一個名稱為Id,類型為int32的列
            DataColumn dcId = new DataColumn("Id",typeof(Int32));
            //設定屬性不允許為空
            dcId.AllowDBNull = false;
            //設定自動遞增
            dcId.AutoIncrement = true;
            //設定初始值為2
            dcId.AutoIncrementSeed = 2;
            //設定遞增值2
            dcId.AutoIncrementStep = 2;
            //建立資料行

            //建立一個名稱為name,類型為String的列
            DataColumn dcName = new DataColumn("name", typeof(String));
            //建立一個名稱為age,類型為int32的列
            DataColumn dcAge = new DataColumn("age", typeof(Int32));

            //添加列到DataTable
            dt.Columns.Add(dcName);
            dt.Columns.Add(dcAge);

            DataRow row = dt.NewRow();

            row["name"] = "老大";
            row["age"] = 20;
            //添加列
            dt.Rows.Add(row);
            //添加表
            ds.Tables.Add(dt);
        }

    }
}