【017】◀▶ C#學習(九) - ADO.NET


《C#入門經典(中文第四版)》在程序中訪問數據庫學習筆記

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

●·● 目錄:

A0 ………… System.Data.SqlClient 命名空間

A1 ………… SqlConnection 類
A2 ………… SqlCommand 類(增、刪、改、查代碼)
A3 ………… SqlDataReader 類
A4 ………… SqlParameter 類
  ※ 參考:SQLHelper 語句 
A5 ………… SqlDataAdapter 類
A6 ………… System.Data 命名空間
A7 ………… DataTable 類
A8 ………… DataSet 類
A9 ………… DataTableCollection 類
G1 ………… DataRow 類

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

            ╔════════╗
╠════╣    第A0個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● System.Data.SqlClient 命名空間

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

            ╔════════╗
╠════╣    第A1個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● SqlConnection 類

1. 表示 SQL Server 數據庫的一個打開的連接。無法繼承此類。

2.SqlConnection 屬性:

  • ConnectionString:獲取或設置用於打開 SQL Server 數據庫的字符串。
  • ConnectionTimeout:獲取在嘗試建立連接時終止嘗試並生成錯誤之前所等待的時間。 
  • Database:獲取當前數據庫或連接打開后要使用的數據庫的名稱。
  • DataSource:獲取要連接的 SQL Server 實例的名稱。 

3. SqlConnection 方法:

  • ChangePassword:將連接字符串中指示的用戶的 SQL Server 密碼更改為提供的新密碼。
  • Close:關閉與數據庫的連接。這是關閉任何打開連接的首選方法。
  • Open:使用 ConnectionString 所指定的屬性設置打開數據庫連接。 
  • CreateCommand:創建並返回一個與 SqlConnection 關聯的 SqlCommand 對象。
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
{
    conn.Open();
    conn.Close();
}

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

            ╔════════╗
╠════╣    第A2個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● SqlCommand 類

1. 表示要對 SQL Server 數據庫執行的一個 Transact-SQL 語句或存儲過程。無法繼承此類。

2. SqlCommand 構造函數:

  • SqlCommand():初始化 SqlCommand 類的新實例。
  • SqlCommand(String):用查詢文本初始化 SqlCommand 類的新實例。
  • SqlCommand(String, SqlConnection):初始化具有查詢文本和 SqlConnectionSqlCommand 類的新實例。
  • SqlCommand(String, SqlConnection, SqlTransaction):使用查詢文本、一個 SqlConnection 以及 SqlTransaction 來初始化 SqlCommand 類的新實例。

3. SqlCommand 屬性:

  • CommandText: 獲取或設置要對數據源執行的 Transact-SQL 語句或存儲過程。
  • CommandTimeout:獲取或設置在終止執行命令的嘗試並生成錯誤之前的等待時間。 
  • CommandType:獲取或設置一個值,該值指示如何解釋 CommandText 屬性。
       CommandType 枚舉
    • StoredProcedure:存儲過程的名稱。
    • TableDirect:表的名稱。
    • Text:SQL 文本命令。
                  SqlCommand cmd = new SqlCommand("login", conn);
                  cmd.CommandType = CommandType.StoredProcedure; //這里采用存儲過程
      
  • Connection:獲取或設置 SqlCommand 的此實例使用的 SqlConnection
  • Transaction:獲取或設置將在其中執行 SqlCommandSqlTransaction
  • Parameters:獲取 SqlParameterCollection。(SQL中的參數集合)
    • SqlParameterCollection
              Count:返回一個整數,其中包含 SqlParameterCollection 中元素的數目。 只讀。
              Item[Int32]:獲取指定索引處的 SqlParameter。
              Item[String]:獲取具有指定名稱的 SqlParameter。
              Add (SqlParameter):將指定的 SqlParameter 對象添加到 SqlParameterCollection 中。
              AddWithValue (String parameterName, Object value):將一個值添加到 SqlParameterCollection 的末尾。在執行此方法的時候,會直接將參數傳遞!
              Insert - 增(使用 Parameters & 直接利用文本
      cmd.CommandText = "Insert Into Table1(UserName, PassWord) Values(@UN, @PW)";
      cmd.Parameters.AddWithValue("UN", textBox1.Text.Trim());
      cmd.Parameters.AddWithValue("PW", textBox2.Text.Trim());
      
      cmd.CommandText =
          String.Format("Insert into Table1(UserName, PassWord) Values('{0}', '{1}')",
          textBox1.Text.Trim(), textBox2.Text.Trim());        
      

              Delete - 刪(使用 Parameters & 直接利用文本

      cmd.CommandText = "Delete From Table1 Where UserName = @UN";
      cmd.Parameters.AddWithValue("UN", textBox3.Text.Trim());
      
      cmd.CommandText = String.Format("Delete From Table1 Where UserName = '{0}'",
          textBox3.Text.Trim());
      

              Update - 改(使用 Parameters & 直接利用文本

      cmd.CommandText = "Update Table1 Set PassWord = @PW Where UserName = @UN";
      cmd.Parameters.AddWithValue("PW", textBox5.Text.Trim());
      cmd.Parameters.AddWithValue("UN", textBox4.Text.Trim());
      
      cmd.CommandText = String.Format(
          "Update Table1 Set PassWord = '{0}' Where UserName = '{1}'",
          textBox5.Text.Trim(), textBox4.Text.Trim());
      

              Select - 查(使用 Parameters & 直接利用文本

      cmd.CommandText = "Select * From Table1 Where UserName = @UN";
      cmd.Parameters.AddWithValue("UN", textBox6.Text.Trim());
      
      cmd.CommandText = String.Format(
          "Select * From Table1 Where UserName = '{0}'", textBox6.Text.Trim());
      
    • Clear:從 SqlParameterCollection 中移除所有 SqlParameter 對象。遍歷的時候要注意清理!
      private static void UpdateDemographics(Int32 customerID,
          string demoXml, string connectionString)
      {
          // Update the demographics for a store, which is stored in an xml column. 
          string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
              + "WHERE CustomerID = @ID;";
      
          using (SqlConnection connection = new SqlConnection(connectionString))
          {
              SqlCommand command = new SqlCommand(commandText, connection);
              command.Parameters.Add("@ID", SqlDbType.Int);
              command.Parameters["@ID"].Value = customerID;
      
              // Use AddWithValue to assign Demographics.
              // SQL Server will implicitly convert strings into XML.
              command.Parameters.AddWithValue("@demographics", demoXml);
          }
      }
      

4. SqlCommand 方法:

  • Cancel: 嘗試取消 SqlCommand 的執行。
  • CreatParameter:創建 SqlParameter 對象的新實例。
  • EndExecuteNonQuery:完成 Transact-SQL 語句的異步執行。
  • ExecuteNonQuery:對連接執行 Transact-SQL 語句並返回受影響的行數。主要執行 Insert、Update、Delete 語句。
    Console.WriteLine("請輸入用戶名:");
    string username = Console.ReadLine();
    Console.WriteLine("請輸入密碼:");
    string password = Console.ReadLine();
    using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
    AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = 
    "Insert into T_Users3(UserName,PassWord) values('" + username + "','" + password + "')";
            //等同於下面的表述
            cmd.CommandText =
    String.Format("Insert into T_Users3(UserName,PassWord) values('{0}','{1}')", username, password);
            cmd.ExecuteNonQuery();
            Console.WriteLine("插入成功!");
            Console.WriteLine("影響行數為:{0}行!",cmd.ExecuteNonQuery());         //返回值為int
        }
    }
    
  • ExecuteReader:將 CommandText 發送到 Connection 並生成一個 SqlDataReader。主要執行 Select 語句。
    • SqlDataReader:提供一種從 SQL Server 數據庫讀取行的只進流的方式。 此類不能被繼承。
              FieldCount:獲取當前行中的列數。
             Item[Int32]:在給定列序號的情況下,獲取指定列的以本機格式表示的值。例如:reader[0]
             Item[String]:在給定列名稱的情況下,獲取指定列的以本機格式表示的值。例如:reader["ID"]
             HasRows:獲取一個值,該值指示 SqlDataReader 是否包含一行或多行。
      using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
      AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
      {
          conn.Open();
          using (SqlCommand cmd = conn.CreateCommand())
          {
              cmd.CommandText = "Select * From Table1";
              SqlDataReader reader = cmd.ExecuteReader();
              string str = "用戶名\t密碼\r\n";
              while(reader.Read())
              {
                  str = String.Format("{0}{1}\t\t{2}\r\n", str, reader["UserName"], reader["PassWord"]);
              }
              richTextBox1.Text = str;
          }
          conn.Close();
      }
      
  • ExecuteScalar:執行查詢,並返回查詢所返回的結果集中第一行的第一列。忽略其他列或行。
    using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
    AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            //加入了 output inserted.Id 之后會返回最后插入的Id
            cmd.CommandText = 
    "Insert into T_Users3(UserName,PassWord) output inserted.Id values('admin','888888')";           
            int i = Convert.ToInt32(cmd.ExecuteScalar());
            Console.WriteLine("插入成功!");
            Console.WriteLine("剛插入的為第{0}行!",i);
        }
    }
    

※ 參考:http://hi.baidu.com/asdfhxc/blog/item/3f0d95ad5d3966004a36d6bd.html

※ 參考:http://hi.baidu.com/asdfhxc/blog/item/c5ddcf6060eb974deaf8f8bf.html

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

            ╔════════╗
╠════╣    第A3個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● SqlDataReader 類

1. 提供一種從 SQL Server 數據庫讀取行的只進流的方式。無法繼承此類。【適合大數據量,每次傳入一行數據】

2. SqlDataReader 屬性:

  • Depth:獲取一個值,用於指示當前行的嵌套深度。
  • FieldCount: 獲取當前行中的列數。
  • HasRows:獲取一個值,該值指示 SqlDataReader 是否包含一行或多行。
  • IsClosed:檢索一個布爾值,該值指示是否已關閉指定的 SqlDataReader 實例。
  • Item:獲取以本機格式表示的列的值。
  • RecordsAffected:獲取執行 Transact-SQL 語句所更改、插入或刪除的行數。
  • VisibleFieldCount:獲取 SqlDataReader 中未隱藏的字段的數目。

3. SqlDataReader 方法:

  • GetInt32(int i):獲取指定列的 32 位有符號整數形式的值。
  • GetString(int i):獲取指定列的字符串形式的值。
       0 為第一列,1 為第二列,2 為第三列......
  • GetOrdinal(String name):在給定列名稱的情況下獲取列序號。
       獲得的值即為上面的0,1,2......
  • Read():使 SqlDataReader 前進到下一條記錄。
    using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
    AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = "select * from T_Users3";
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())        //一條條地往下執行
                {
                    //簡單判斷以字母開頭的UserName    
                    if (reader.GetString(1)[0] < 'z' && reader.GetString(1)[0] > 'A')              
                    {
                        //通過PadRight,用空格將右側補齊
                        Console.WriteLine(reader.GetInt32(reader.GetOrdinal("Id")).ToString().PadRight(5) + 
                            reader.GetString(reader.GetOrdinal("UserName")).Trim().PadRight(15) + 
                            reader.GetString(reader.GetOrdinal("PassWord")).PadRight(20));           
                    } 
                }
            }
        }
    }
    

    效果如下圖所示:

    //通過上面四個類,建立了一個驗證密碼的控制台程序!Check it out!!!
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //vs內嵌數據庫,需加入此語句!
                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("DataDirectory",dataDir);
                }
    
                //先建立數據庫,並加入測試的UserName和PassWord列!
                Console.WriteLine("請輸入用戶名:");               
                string username = Console.ReadLine();
                Console.WriteLine("請輸入密碼:");           
                string password = Console.ReadLine();
    
                using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
                                                    AttachDBFilename=|DataDirectory|\Database2.mdf;
                                                    Integrated Security=True;
                                                    User Instance=True"))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        //注意這個地方的單引號,很容易出錯的!
                        cmd.CommandText = "select * from T_Users where UserName = '" + username + "'";           
                        using (SqlDataReader reader = cmd.ExecuteReader())        //查找上面的username!
                        {
                            if (reader.Read())              //存在則為true
                            {
                                //用戶名存在
                                //在PassWord列中遍歷
                                string dbpassword = reader.GetString(reader.GetOrdinal("PassWord"));      
                                //注意要去掉數據庫中字符串的空格,默認有空格的!      
                                if (password == dbpassword.Trim())         
                                {
                                    Console.WriteLine("登陸成功!");
                                }
                                else
                                {
                                    Console.WriteLine("登錄失敗!");
                                }
                            }
                            else
                            {
                                Console.WriteLine("用戶名錯誤!");
                            }
                        }
                    }
                }
                Console.ReadKey();
            }
        }
    }
    

     

    //簡單變形,達到上面的效果!
    Console.WriteLine("輸入用戶名:");
    string username = Console.ReadLine();
    Console.WriteLine("輸入密碼:");
    string password = Console.ReadLine();
    
    using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
    AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            //用戶名正確,密碼可以用:”3' or '1' = '1“,也可以登錄成功!
            cmd.CommandText = 
    "select count(*) from T_Users3 where UserName = '" + username + "' and PassWord = '" + password + "'";
            int i = Convert.ToInt32(cmd.ExecuteScalar());
            if (i > 0)
                Console.WriteLine("Login Succeed!");
            else
                Console.WriteLine("Login Failed!");
        }
    }
    

     

    //用 SqlCommand 類的 Parameters 屬性改寫!
    Console.WriteLine("輸入用戶名:");
    string username = Console.ReadLine();
    Console.WriteLine("輸入密碼:");
    string password = Console.ReadLine();
    
    using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
    AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = 
    "select count(*) from T_Users3 where UserName = @UserName and PassWord = @PassWord";
            cmd.Parameters.AddWithValue("UserName", username);
            cmd.Parameters.AddWithValue("PassWord", password);
    
            int i = Convert.ToInt32(cmd.ExecuteScalar());
            if (i > 0)
                Console.WriteLine("Login Succeed!");
            else
                Console.WriteLine("Login Failed!");
        }
    }
    

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

            ╔════════╗
╠════╣    第A4個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● SqlParameter 類

1. 表示 SqlCommand 的參數,也可以是它到 DataSet 列的映射。無法繼承此類。
2. SqlParameter 構造函數:

  • SqlParameter (String, Object):用參數名稱和新 SqlParameter 的一個值初始化 SqlParameter 類的新實例。
  • SqlParameter (String, SqlDbType):用參數名稱和數據類型初始化 SqlParameter 類的新實例。
       SqlDbType 枚舉:指定要用於 SqlParameter 中的字段和屬性的 SQL Server 特定的數據類型。
    • BigInt:Int64。
    • Binary:Byte 類型的 Array。

※ 建立通用的 SQL 查詢語句!

首先,新建一個 SQLHelper 類:

    class SQLHelper
    {
        //執行查詢
        public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)  
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach(SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    return cmd.ExecuteNonQuery();
                }
            }
        }

        //執行返回第一行第一列的內容
        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)  
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    return cmd.ExecuteScalar();
                }
            }
        }

        //執行返回內存中的表格
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)  
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    DataSet dataset = new DataSet();
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(dataset);
                    DataTable table = dataset.Tables[0];
                    return table;
                }
            }
        }
    }

然后,在程序中可以按照如下來調用,參數的個數可以從1個到無數個!

        private void button2_Click(object sender, EventArgs e)
        {
            SQLHelper.ExecuteNonQuery("insert into Table1(UserName,PassWord) values(@UserName,@PassWord)",
                new SqlParameter("UserName", textBox1.Text), new SqlParameter("PassWord", textBox2.Text));
      //實現數據的插入
        }

        private void button3_Click(object sender, EventArgs e)
        {
            SQLHelper.ExecuteNonQuery("update Table1 set UserName = 'Mike',PassWord = 'love' where UserName = @UserName",
                new SqlParameter("UserName",textBox1.Text));
      //實現數據的更新
        }

        private void button4_Click(object sender, EventArgs e)
        {
            DataTable table = SQLHelper.ExecuteDataTable("select * from Table1");
            for (int i = 0; i < table.Rows.Count;i++ )
            {
                DataRow row = table.Rows[i];
                MessageBox.Show(row["UserName"].ToString());
                //實現表格存儲到內存
            }
        }    

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

            ╔════════╗
╠════╣    第A5個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● SqlDataAdapter 類

1. 表示用於填充 DataSet 和更新 SQL Server 數據庫的一組數據命令和一個數據庫連接。無法繼承此類。

2. SqlDataAdapter 構造函數:

  • SqlDataAdapter (SqlCommand):初始化 SqlDataAdapter 類的新實例,用指定的 SqlCommand 作為 SelectCommand 的屬性。

3. SqlDataAdapter 屬性:

  • DeleteCommand:獲取或設置一個 Transact-SQL 語句或存儲過程,以從數據集刪除記錄。
  • InsertCommand:獲取或設置一個 Transact-SQL 語句或存儲過程,以在數據源中插入新記錄。
  • SelectCommand:獲取或設置一個 Transact-SQL 語句或存儲過程,用於在數據源中選擇記錄。 
  • UpdateCommand:獲取或設置一個 Transact-SQL 語句或存儲過程,用於更新數據源中的記錄。

4. SqlDataAdapter 方法:

  • Fill:填充 DataSetDataTable
    • Fill (DataSet):在 DataSet 中添加或刷新行以匹配使用 DataSet 名稱的數據源中的行,並創建一個名為“Table”的 DataTable
    • Fill (DataTable):在 DataSet 的指定范圍中添加或刷新行以匹配使用 DataSetDataTableIDataReader 名稱的數據源中的行。
  • Update:為 DataSet 中每個已插入、已更新或已刪除的行調用相應的 INSERT、UPDATE 或 DELETE 語句。
    • Update (DataRow[]):為指定的 DataRow 對象數組中每個已插入、已更新或已刪除的行調用相應的 INSERT、UPDATE 或 DELETE 語句。 
    • Update (DataSet):為指定 DataSet 中每個已插入、已更新或已刪除的行調用相應的 INSERT、UPDATE 或 DELETE 語句。
    • Update (DataTable):為指定 DataTable 中每個已插入、已更新或已刪除的行調用相應的 INSERT、UPDATE 或 DELETE 語句。

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

            ╔════════╗
╠════╣    第A6個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● SqlCommandBuilder 類

1. 自動生成單表命令,用於將對 DataSet 所做的更改與關聯的 SQL Server 數據庫的更改相協調。無法繼承此類。

2. SqlCommandBuilder 構造函數:

  • SqlCommandBuilder ():初始化 SqlCommandBuilder 類的新實例。
  • SqlCommandBuilder (SqlDataAdapter):使用關聯的 SqlDataAdapter 對象初始化 SqlCommandBuilder 類的新實例。
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from Table1";
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    DataSet dataset = new DataSet();
                    adapter.Fill(dataset);
                    DataTable table = dataset.Tables[0];
                    DataRow row = table.Rows[0];
                    row["Name"] = "Matthew";
                    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);         //傳入數據庫
                    adapter.Update(dataset);
                    MessageBox.Show("修改成功!");
                }
            }

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

            ╔════════╗
╠════╣    第A7個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● System.Data 命名空間

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

            ╔════════╗
╠════╣    第A7個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● DataTable 類

1. 表示一個內存中數據表

2. DataTable 屬性:

  • Columns:獲取屬於該表的列的集合。≡ DataColumnCollection
  • DataSet:獲取此表所屬的 DataSet
  • Rows:獲取屬於該表的行的集合。≡ DataRowCollection
    • DataRowCollection表示 DataTable 的行的集合。
      • Count:獲取該集合中 DataRow 對象的總數。
      • Item:作為列表獲取集合的項。(可以獲取每一個表的值,對應 DataRow 對象)
      • List:作為列表獲取集合的項。
      • Add(DataRow):將指定的 DataRow 添加到 DataRowCollection 對象中。
      • Clear:清除所有行的集合。
      • IndexOf:獲取指定 DataRow 對象的索引。
      • InsertAt:將新行插入到集合中的指定位置。
      • Remove:從集合中移除指定的 DataRow
      • RemoveAt:從集合中移除指定索引處的行。
    • DataRow 類:表示 DataTable 中的一行數據。
  • TableName:獲取或設置 DataTable 的名稱。

3. DataTable 方法:

  • Clear:清除所有數據的 DataTable
  • Copy:復制該 DataTable 的結構和數據。
  • NewRow:創建與該表具有相同架構的新 DataRow。(並不是在數據表中添加了新行)
    DataRow myRow = dt.NewRow();
    myRow["學生"] = "小蟹";
    myRow["英語"] = 82;
    myRow["數學"] = 93;
    myRow["自然"] = 39;
    myRow["美術"] = 39;
    dt.Rows.Add(myRow);
    

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

            ╔════════╗
╠════╣    第A8個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● DataSet 類

1. 表示數據的內存中緩存。【適合小數據量的適合用,一次將所有放入內存】

2. DataSet 屬性:

  • Tables:獲取包含在 DataSet 中的表的集合。≡ DataTableCollection
    • DataTableCollection 類:表示 DataSet 的表的集合。
      • Count獲取集合中的元素的總數。
      • Item[Int32]獲取位於指定索引位置的 DataTable 對象。
      • Item[String]獲取具有指定名稱的 DataTable 對象。

3. DataSet 方法:

  • Clear:通過移除所有表中的所有行來清除任何數據的 DataSet
  • Copy:復制該 DataSet 的結構和數據。
  • Merge (DataRow ()):DataRow 對象數組合並到當前的 DataSet 中。
  • GetChanges:獲取 DataSet 的副本,該副本包含自上次加載以來或自調用 AcceptChanges 以來對該數據集進行的所有更改。
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from Table1";
                    DataSet dataset = new DataSet();                     //相當於容器
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);    //執行SQL語句
                    adapter.Fill(dataset);                               //傳入數據
                    DataTable table = dataset.Tables[0];                 //傳給Table
                    for (int i = 0; i < table.Rows.Count;i++ )           //遍歷Table的Row
                    {
                        DataRow row = table.Rows[i];                     //傳遞給每個Row
                        string name = Convert.ToString(row["UserName"]); //取值
                        MessageBox.Show(name);
                    }
                }
            }

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

            ╔════════╗
╠════╣    第A9個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● DataTableCollection 類

1. 表示 DataSet 的表的集合。

2. DataTableCollection 屬性:

  • Count:獲取集合中的元素的總數。
  • Item (Int32):獲取位於指定索引位置的 DataTable 對象。
  • Item (String):獲取具有指定名稱的 DataTable 對象。
  • Item (String dataTableName, String dataTableNamespace):獲取指定命名空間中具有指定名稱的 DataTable 對象。
  • List:作為列表獲取集合的項。≡ ArrayList

3. DataTableCollection 方法:

  • Add:使用默認名稱創建一個新的 DataTable 對象,並將其添加到集合中。
  • Add (DataTable):將指定的 DataTable 添加到集合。
  • Add (String):使用指定名稱創建一個 DataTable 對象,並將其添加到集合中。
  • AddRange:將指定的 DataTable 數組的元素復制到集合末尾。
  • Clear:清除所有 DataTable 對象的集合。
  • Contains (String):獲取一個值,該值指示集合中是否存在具有指定名稱的 DataTable 對象。
  • CopyTo (DataTable(), Int32):將當前 DataTableCollection 的所有元素復制到一維 Array,從指定目標數組索引處開始。
  • IndexOf (DataTable):獲取指定 DataTable 對象的索引。
  • IndexOf (String):獲取具有指定名稱的 DataTable 對象的集合中的索引。
  • Remove (DataTable):從集合中移除指定的 DataTable 對象。
  • Remove (String):從集合中刪除具有指定名稱的 DataTable 對象。
  • RemoveAt:從集合中刪除具有指定名稱的 DataTable 對象。

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

            ╔════════╗
╠════╣    第G1個    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● DataRow 類

1. 表示 DataTable 中的一行數據。

2. DataRow 屬性:

  • Item (DataColumn):獲取或設置存儲在指定的 DataColumn 中的數據。
  • Item (Int32):獲取或設置存儲在由索引指定的列中的數據。
    ※ 使用:
    • row [0] 直接引用索引!
  • Item (String):獲取或設置存儲在由名稱指定的列中的數據。
    ※ 使用:
    • row ["UserName"] 直接引用列名稱!
  • Table:獲取該行擁有其架構的 DataTable
  • RowState:獲取與該行和 DataRowCollection 的關系相關的當前狀態。
       RowState 枚舉獲取 DataRow 對象的狀態。

3. DataRow 方法:

  • Delete:刪除 DataRow
  • IsNull (DataColumn):獲取一個值,該值指示指定的 DataColumn 是否包含 null 值。
  • IsNull (Int32):獲取一個值,該值指示位於指定索引處的列是否包含 null 值。
  • IsNull (String):獲取一個值,該值指示指定的列是否包含 null 值。
  • SetNull:將指定的 DataColumn 的值設置為 null 值。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com