如何在各類空間中輸入輸出數據(讀書筆記2)
一.思維導圖
二.常用知識點描述
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)