1. 程式人生 > >如何在各類空間中輸入輸出數據(讀書筆記2)

如何在各類空間中輸入輸出數據(讀書筆記2)

default cit server 輸入與輸出 命令 pac 區別 讀書筆記 begin

一.思維導圖

技術分享圖片

二.常用知識點描述

1.DataAdapter對象

充當DataSet和數據源之間用於檢索和保存數據的橋梁。DataAdapter類代表用於填充DataSet以及更新數據源的一組數據庫命令和一個數據庫連接

1.1屬性和方法

屬性:

SelectCommand引用從數據源中檢索行的Command對象。

InsertCommand引用將插入的行從DataSet寫入數據源的Command對象。

UpdateCommand引用將修改的行從DataSet寫入數據源的Command對象。

DeleteCommand引用從數據源中刪除行的Command對象。

方法:

Fill。使用SqlDataAdapter的這個方法,從數據源增加或刷新行,並將這些行放到DataSet表中。Fill方法調用SelectCommand屬性所指定的SELECT語句。

Update。使用DataAdapter對象的這個方法,將DataSet表的更改傳送到相應的數據源中。該方法為DataSet的DataTable中每一指定的行調用相應的INSERT、UPDATE或DELETE命令。

2.DataTable對象

一個臨時保存數據的網格虛擬表(表示內存中數據的一個表)

2.1屬性和方法

屬性

Columns:返回屬於這個表的列的集合
DataSet:獲得包含這個表的DataSet
DefaultView:獲得表的自定義視圖,它可能包含已過濾的視圖或遊標位置
MinimumCapacity:獲得或設置表中行的初始數目(默認為25)
Rows:返回屬於這個表的行集合
TableName:獲得或設置表的名稱。這個屬性還可以被指定為構造函數的參數

方法

AcceptChanges:提交對該表的所有修改

NewRow:添加一個新的DataRow

3.ComboBox控件

3.1屬性和方法

屬性

DataSource :獲取或設置此 ComboBox 的數據源。

DisplayMember :獲取或設置要為此 ListControl 顯示的屬性。

SelectedText :獲取或設置 ComboBox 的可編輯部分中選定的文本。

ValueMember :獲取或設置一個屬性,該屬性將用作 ListControl 中的項的實際值。

SelectedValue:獲取或設置由 ValueMember 屬性指定的成員屬性的值。

註:

DisplayMember 與ValueMember 屬性的區別: DisplayMember綁定的是需顯示的字段,ValueMember綁定的是對應的值 。

方法

Focus為控件設置輸入焦點。

三.實例演示

1.關於TextBox和ComboBox的輸入輸出。

技術分享圖片

1.1輸入

(1)連接數據庫。這裏使用到了configurationManager類(配置管理器),要引用using System.Configuration這個包。(並且需要在解決方案資源管理器裏找到類文件選擇“引用”,添加上去才能使用)。配置管理器的路徑放在了App.config文件(配置文件)裏。

<?xml version="1.0" encoding="utf-8" ?>    //App.config文件代碼
<configuration>
    <connectionStrings>
        <add name="Sql"
             connectionString="Server=(local);Database=MyHospital;Integrated Security=false;User id=SqlLogin1;Password=$q17o9!n1;FailOver Partner=local"
             providerName="System.Data.SqlClient"/>
        <add name="Sql2"
             connectionString="Server=(local);Database=MyHospital;Integrated Security=sspi"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

(2)連接好數據庫後就可以開始輸入數據。代碼如下。

 1 SqlConnection sqlConnection = new SqlConnection();                                             
 2             sqlConnection.ConnectionString =
 3             ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             
 4             SqlCommand sqlCommand = new SqlCommand();                                                      
 5             sqlCommand.Connection = sqlConnection;
 6             sqlCommand.CommandText =
 7                 "INSERT orders (SupplyID,OrderKinds,OrderDate,GetDate,ProducePla) VALUES(@SupplyID,@OrderKinds,@OrderDate,@GetDate,@ProducePla);";                 /
 8             sqlCommand.Parameters.AddWithValue("@SupplyID",comb_Supplyname.SelectedValue);
 9             sqlCommand.Parameters.AddWithValue("@OrderKinds", this.Order.Text.Trim());
10             sqlCommand.Parameters.AddWithValue("@OrderDate", this.dateTimePicker1.Value);
11             sqlCommand.Parameters.AddWithValue("@GetDate", this.dateTimePicker2.Value);
12             sqlCommand.Parameters.AddWithValue("@ProducePla", this.Address.Text.Trim());
13             sqlConnection.Open();                                                                      
14             int rowAffected = sqlCommand.ExecuteNonQuery();                                           
15             sqlConnection.Close();                                                                      
16             if (rowAffected == 1)                                                                     
17             {
18                 MessageBox.Show("添加成功。");
19                 ordersHelper.order = Order.Text.Trim();
20                 if (dateTimePicker2.Value == DateTime.Now)
21                 {
22                     ordersHelper.state = "入庫";
23                 }
24                 else {
25                     ordersHelper.state = "未入庫";
26                 }
27             }
28             else                                                                                        
29             {
30                 MessageBox.Show("添加失敗!");                                                          
31             }

1.2輸出

(1)連接數據庫後,SQL數據適配器sqlDataAdapter讀取數據,並填充數據表。將下拉框的成員變量設置為數據表的名稱列,將下拉框的值變量設置為數據表的編號列。

 1 SqlConnection sqlConnection = new SqlConnection();                                             
 2             sqlConnection.ConnectionString =
 3             ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             
 4             SqlCommand sqlCommand = new SqlCommand();                                                       
 5             sqlCommand.Connection = sqlConnection;                                                         
 6             sqlCommand.CommandText = "SELECT * FROM supplyer;";                                            
 7             SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           
 8             sqlDataAdapter.SelectCommand = sqlCommand;                                                     
 9             DataTable supplyer = new DataTable();                                                        
10             sqlConnection.Open();                                                                          
11             sqlDataAdapter.Fill(supplyer);                                                               
12             this.comb_Supplyname.DataSource = supplyer;                                                       
13             this.comb_Supplyname.DisplayMember = "Supplyname";                                                        
14             this.comb_Supplyname.ValueMember = "SupplyID";                                                             
15             SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
16             if (sqlDataReader.Read())                                                                       
17             {
18 
19                 this.comb_Supplyname.SelectedValue = (int)sqlDataReader["SupplyID"];
20 
21             }
22             sqlDataReader.Close();    

2.關於DataGridView的輸入輸出

技術分享圖片

2.1輸出

 1 SqlConnection sqlConnection = new SqlConnection();                                              //聲明並實例化SQL連接;
 2             sqlConnection.ConnectionString =
 3                 "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                             //在字符串變量中,描述連接字符串所需的服務器地址、數據庫名稱、集成安全性(即是否使用Windows驗證);
 4             SqlCommand sqlCommand = new SqlCommand();                                                       //聲明並實例化SQL命令;
 5             sqlCommand.Connection = sqlConnection;                                                          //將SQL命令的連接屬性指向SQL連接;
 6             sqlCommand.CommandText = "SELECT * FROM tb_Student;";                                           //指定SQL命令的命令文本;該命令查詢所有學生;
 7             SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //聲明並實例化SQL數據適配器;
 8             sqlDataAdapter.SelectCommand = sqlCommand;                                                      //將SQL數據適配器的查詢命令屬性指向SQL命令;
 9             DataTable studentTable = new DataTable();                                                       //聲明並實例化數據表,用於保存所有學生,以用作數據網格視圖的數據源;
10             sqlConnection.Open();                                                                           //打開SQL連接;
11             sqlDataAdapter.Fill(studentTable);                                                              //SQL數據適配器讀取數據,並填充學生數據表;
12             sqlConnection.Close();                                                                          //關閉SQL連接;
13             this.dgv_Score.DataSource = studentTable;       

2.2輸出(更新)

SqlConnection sqlConnection = new SqlConnection();                                              //聲明並實例化SQL連接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                             //在字符串變量中,描述連接字符串所需的服務器地址、數據庫名稱、集成安全性(即是否使用Windows驗證);
            SqlCommand insertCommand = new SqlCommand();                                                    //聲明並實例化SQL命令;該命令用於插入記錄;
            insertCommand.Connection = sqlConnection;                                                       //將SQL命令的連接屬性指向SQL連接;
            insertCommand.CommandText =                                                                     //指定SQL命令的命令文本;
                "INSERT tb_Student"
                + "(No,Name,Gender,BirthDate,Class,Speciality)"
                + " VALUES(@No,@Name,@Gender,@BirthDate,@Class,@Speciality);";
            insertCommand.Parameters.Add("@No", SqlDbType.Char, 10, "No");                                  //向SQL命令的參數集合添加參數的名稱、SQL Server數據類型、長度(僅用於定長類型)、所綁定的數據表中的列名;
            insertCommand.Parameters.Add("@Name", SqlDbType.VarChar, 0, "Name");                                 
            insertCommand.Parameters.Add("@Gender", SqlDbType.VarChar, 0, "Gender");
            insertCommand.Parameters.Add("@BirthDate", SqlDbType.VarChar, 0, "BirthDate");
            insertCommand.Parameters.Add("@Class", SqlDbType.VarChar, 0, "Class");
            insertCommand.Parameters.Add("@Speciality", SqlDbType.VarChar, 0, "Speciality");
            SqlCommand updateCommand = new SqlCommand();                                                    //聲明並實例化SQL命令;該命令用於更新記錄;
            updateCommand.Connection = sqlConnection;                                                       //將SQL命令的連接屬性指向SQL連接;
            updateCommand.CommandText =                                                                     //指定SQL命令的命令文本;
                "UPDATE tb_Student"
                + " SET No=@NewNo,Name=@Name,Gender=@Gender,BirthDate=@BirthDate,Class=@Class,Speciality=@Speciality"
                + " WHERE No=@OldNo;";
            updateCommand.Parameters.Add("@NewNo", SqlDbType.Char, 10, "No");                               //向SQL命令的參數集合添加參數的名稱、SQL Server數據類型、長度(僅用於定長類型)、所綁定的數據表中的列名;
            updateCommand.Parameters.Add("@Name",SqlDbType.VarChar,0,"Name");                              
            updateCommand.Parameters.Add("@Gender", SqlDbType.VarChar, 0, "Gender");
            updateCommand.Parameters.Add("@BirthDate", SqlDbType.VarChar, 0, "BirthDate");
            updateCommand.Parameters.Add("@Class", SqlDbType.VarChar, 0, "Class");
            updateCommand.Parameters.Add("@Speciality", SqlDbType.VarChar, 0, "Speciality");
            updateCommand.Parameters.Add("@OldNo", SqlDbType.Char, 10, "No");                               //若學號發生更改,則還需提供舊學號,以便查詢要更改的行;
            updateCommand.Parameters["@OldNo"].SourceVersion = DataRowVersion.Original;                     //舊學號的來源版本,為數據行版本中的原始值;
            SqlCommand deleteCommand = new SqlCommand();                                                    //聲明並實例化SQL命令;該命令用於刪除;
            deleteCommand.Connection = sqlConnection;                                                       //將SQL命令的連接屬性指向SQL連接;
            deleteCommand.CommandText =                                                                     //指定SQL命令的命令文本;
                "DELETE tb_Student"
                + " WHERE No=@No;";
            deleteCommand.Parameters.Add("@No", SqlDbType.Char, 10, "No");
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //聲明並實例化SQL數據適配器;
            sqlDataAdapter.InsertCommand = insertCommand;                                                   //將SQL數據適配器的屬性InsertCommand指向用於插入記錄的SQL命令;
            sqlDataAdapter.UpdateCommand = updateCommand;                                                   //將SQL數據適配器的屬性UpdateCommand指向用於更新記錄的SQL命令;
            sqlDataAdapter.DeleteCommand = deleteCommand;                                                   //將SQL數據適配器的屬性DeleteCommand指向用於刪除記錄的SQL命令;
            DataTable studentTable1 = (DataTable)this.dgv_Score.DataSource;                                 //聲明數據表,並指向數據網格視圖的數據源;數據源默認類型為object,還需強制轉換類型;
            sqlConnection.Open();                                                                           //打開SQL連接;
            int rowAffected = sqlDataAdapter.Update(studentTable1);                                         //SQL數據適配器根據學生數據表提交所有更新,並返回受影響行數;
            sqlConnection.Close();                                                                          //關閉SQL連接;
            MessageBox.Show("更新" + rowAffected.ToString() + "行。");       

三.關於PitureBox的輸入與輸出

技術分享圖片

3.1輸出

 1 SqlConnection sqlConnection = new SqlConnection();                                              //聲明並實例化SQL連接;
 2             sqlConnection.ConnectionString =
 3                 "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                             //在字符串變量中,描述連接字符串所需的服務器地址、數據庫名稱、集成安全性(即是否使用Windows驗證);
 4             SqlCommand sqlCommand = new SqlCommand();                                                       //聲明並實例化SQL命令;
 5             SqlCommand sqlCommand2 = new SqlCommand();                                                      //聲明並實例化SQL命令;
 6             sqlCommand.Connection = sqlConnection;                                                          //將SQL命令的連接屬性指向SQL連接;
 7             sqlCommand2.Connection = sqlConnection;                                                         //將SQL命令的連接屬性指向SQL連接;
 8             sqlCommand.CommandText = "SELECT * FROM tb_Class;";                                             //指定SQL命令的命令文本;該命令查詢所有班級,以用作下拉框數據源;
 9             sqlCommand2.CommandText = "SELECT * FROM tb_Student WHERE No=@No;";                             //指定SQL命令的命令文本;該命令查詢指定學生;
10             sqlCommand2.Parameters.AddWithValue("@No", "3120707001");                                       //向SQL命令的參數集合添加參數的名稱、值;
11             SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //聲明並實例化SQL數據適配器,同時借助構造函數,將其SelectCommand屬性設為先前創建的SQL命令;
12             sqlDataAdapter.SelectCommand = sqlCommand;                                                      //將SQL數據適配器的查詢命令屬性指向SQL命令;
13             DataTable classTable = new DataTable();                                                         //聲明並實例化數據表,用於保存所有班級,以用作下拉框數據源;
14             sqlConnection.Open();                                                                           //打開SQL連接;
15             sqlDataAdapter.Fill(classTable);                                                                //SQL數據適配器讀取數據,並填充班級數據表;
16             this.cmb_Class.DataSource = classTable;                                                         //將班級下拉框的數據源設為班級數據表;
17             this.cmb_Class.DisplayMember = "Name";                                                          //將班級下拉框的顯示成員設為班級數據表的名稱列;
18             this.cmb_Class.ValueMember = "No";                                                              //將班級下拉框的值成員設為班級數據表的編號列;
19             SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader();                                      //調用SQL命令的方法ExecuteReader來執行命令,並獲取數據閱讀器;
20             byte[] photoBytes = null;                                                                       //聲明字節數組,用於保存照片數據;但先賦予空值;
21             if (sqlDataReader.Read())                                                                       //若數據閱讀器成功讀取到下一條記錄(首次查詢則表示第一條記錄);
22             {
23                
24                 photoBytes =
25                     (sqlDataReader["Photo"] == DBNull.Value ? null : (byte[])sqlDataReader["Photo"]);       //根據照片是否為數據庫空值,分別將空值、轉為字節數組的照片數據賦予事先聲明的字節數組;
26             }
27             sqlDataReader.Close();                                                                          //關閉數據閱讀器(同時關閉連接);
28             if (photoBytes != null)                                                                         //若學生的照片非空;
29             {
30                 MemoryStream memoryStream = new MemoryStream(photoBytes);                                   //聲明並實例化內存流,用於讀取照片的字節數據;
31                 this.ptb_Photo.Image = Image.FromStream(memoryStream);                                      //調用圖像的靜態方法FromStream從內存流中讀取圖像,並賦予圖像框;
32             }

3.2輸入

 1 MemoryStream memoryStream = new MemoryStream();                                                 //聲明並實例化內存流,用於讀取照片的字節數據;
 2             this.ptb_Photo.Image.Save(memoryStream, ImageFormat.Bmp);                                       //調用圖像框的圖像的靜態方法Save,將圖像保存至內存流;
 3             byte[] photoBytes = new byte[memoryStream.Length];                                              //聲明並實例化字節數組,用於保存照片數據;數組長度對應內存流長度;
 4             memoryStream.Seek(0, SeekOrigin.Begin);                                                         //保存後的內存流的偏移位置在末尾,需通過查找來將偏移位置設為起始;
 5             memoryStream.Read(photoBytes, 0, photoBytes.Length);                                            //將內存流讀入字節數組;
 6             SqlConnection sqlConnection = new SqlConnection();                                              //聲明並實例化SQL連接;
 7             sqlConnection.ConnectionString =
 8                 "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                             //在字符串變量中,描述連接字符串所需的服務器地址、數據庫名稱、集成安全性(即是否使用Windows驗證);
 9             SqlCommand sqlCommand = new SqlCommand();                                                       //聲明並實例化SQL命令;
10             sqlCommand.Connection = sqlConnection;                                                          //將SQL命令的連接屬性指向SQL連接;
11             sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
12                 "UPDATE tb_Student"
13                 + " SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,ClassNo=@ClassNo,Speciality=@Speciality,Photo=@Photo"
14                 + " WHERE No=@No;";
15             sqlCommand.Parameters.AddWithValue("@Name", this.txb_Name.Text.Trim());                         //向SQL命令的參數集合添加參數的名稱、值;
16             sqlCommand.Parameters.AddWithValue("@Gender", this.rdb_Male.Checked);
17             sqlCommand.Parameters.AddWithValue("@BirthDate", this.dtp_BirthDate.Value);
18             sqlCommand.Parameters.AddWithValue("@ClassNo", (int)this.cmb_Class.SelectedValue);
19             sqlCommand.Parameters.AddWithValue("@Speciality", this.txb_Speciality.Text.Trim());
20             sqlCommand.Parameters.AddWithValue("@Photo", photoBytes);
21             sqlCommand.Parameters.AddWithValue("@No", "3120707001");
22             sqlConnection.Open();                                                                           //打開SQL連接;
23             int rowAffected = sqlCommand.ExecuteNonQuery();                                                 //調用SQL命令的方法ExecuteNonQuery來執行命令,向數據庫寫入數據,並返回受影響行數;
24             sqlConnection.Close();                                                                          //關閉SQL連接;
25             MessageBox.Show("更新" + rowAffected.ToString() + "行。");     

如何在各類空間中輸入\輸出數據(讀書筆記2)