第九周學習筆記
第九周學習筆記
一、本周首先講了ADO.NET的應用,使用ADO.NET連接數據庫,它的代碼更簡便一些,但是運行速度較平常的代碼慢。
1.步驟:項目—添加—新建項,選用ADO.NET Entity Data Model模板。
2.按照提示的步驟一直下去,直到數據庫連接成功。
代碼如下截屏所示:
數據庫連接成功。
註意:選擇服務器時,建議寫(local),這樣下次到另一臺電腦使用會比較方便。
1.本次示例為制作一個登錄界面:
①數據庫建庫、建表、插入數據等代碼如下:
②最終運行界面如下:
C#中代碼如下:
//添加調用:
using System.Data.SqlClient
//包含訪問SQL Server所需的各類對象;
using System.Security.Cryptography;
namespace Ex22_Command_Parameter
{
public partial class frm_Login : Form
{
/// <summary>
/// 公有方法:構造函數;
/// </summary>
public frm_Login()
{
InitializeComponent();
this.StartPosition=FormStartPosition.CenterScreen;
//本窗體啟動位置設為屏幕中央;
}
private void btn_Login_Click(object sender, EventArgs e)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] passwordBytes = Encoding.Default.GetBytes(txb_Password .Text .Trim ());
byte[] passwordHashed = md5.ComputeHash(passwordBytes );
EduBaseDemo edubase=new EduBaseDemo ();
var user=(from us in edubase.User
where us.No ==this.txb_UserNo .Text .Trim () && us.Password ==passwordHashed
select us).FirstOrDefault ();
if (user!=null)
//若查得所輸用戶號相應的1行記錄;
{
MessageBox.Show("登錄成功。");
//顯示正確提示;
}
else
//否則;
{
MessageBox.Show("用戶號/密碼有誤,請重新輸入!");
//顯示錯誤提示;
this.txb_Password.Focus();
//密碼文本框獲得焦點;
this.txb_Password.SelectAll();
//密碼文本框內所有文本被選中;
}
}
}
}
二、本周另外主要講解了數據集、數據關系的運用。
創建窗體,加入樹形視圖、數據表和載入按鈕。
實現的功能有:點擊載入按鈕,載入醫院表、科室表和科室職能表(即具體疾病、職能),以樹形視圖的模式顯現出來。點擊葉子節點的內容,在右邊的數據表顯示病人的信息。
C#主要代碼如下:
using System.Data.SqlClient;
namespace _5._6數據集_數據關系
{
public partial class frm_OutpatientService : Form
{
public frm_OutpatientService()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
this.dgv_Patient.AllowUserToAddRows = false;
this.dgv_Patient.RowHeadersVisible = false;
this.dgv_Patient.BackgroundColor = Color.White;
this.dgv_Patient.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells;
}
private void btn_Load_Click(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=HISDatabase;uid=sa;pwd=2wsx@WSX";
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText =
"SELECT * FROM tb_Hospital;"
+ "SELECT * FROM tb_Department;"
+ "SELECT * FROM tb_Disease;";
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet dataSet = new DataSet();
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet);
sqlConnection.Close();
DataTable hospitalTable = dataSet.Tables[0];
DataTable departmentTable = dataSet.Tables[1];
DataTable diseaseTable = dataSet.Tables[2];
DataRelation[] dataRelations =
//聲明數據關系數組;
{
new DataRelation
//實例化數據關系,實現醫院表、科室表之間的層次關系;
("Hospital_Department"
//數據關系名稱;
, hospitalTable.Columns["No"]
//父表的被參照列為院系表的編號列;
, departmentTable.Columns["HospitalNo"]
//子表的參照列為專業表的院系編號列;
, false)
//不創建約束(父列上的唯一約束、子列上的外鍵約束);
, new DataRelation
//實例化數據關系,實現科室表、疾病表之間的層次關系;
("Department_Disease" //數據關系名稱;
, departmentTable.Columns["No"]
//父表的被參照列為專業表的編號列;
, diseaseTable.Columns["DepartmentNo"] //子表的參照列為疾病表的專業編號列;
,false)
//不創建約束(父列上的唯一約束、子列上的外鍵約束);
};
dataSet.Relations.AddRange(dataRelations);
//將數據關系數組批量加入數據集的關系集合中;
this.trv_HospitalUnit.Nodes.Clear();
//樹形視圖的節點集合清空;
List<TreeNode> treeNodes = new List<TreeNode>();
//聲明並實例化樹形節點列表;
foreach (DataRow hospitalRow in hospitalTable.Rows)
//遍歷院系數據表中的每一數據行;
{
TreeNode hospitalNode = new TreeNode();
//聲明並實例化醫院表節點,該節點對應當前某個部門;
hospitalNode.Text = hospitalRow["Name"].ToString();
//醫院表節點的文本設為當前部門的名稱;
treeNodes.Add(hospitalNode);
//醫院表節點加入樹形節點列表,成為第0級節點之一;
foreach (DataRow departmentRow in hospitalRow.GetChildRows("Hospital_Department"))
//借助先前定義的數據關系,遍歷當前醫院所在數據行的子行,即下屬所有科室;
{
TreeNode departmentNode = new TreeNode();
//聲明並實例化科室節點,該節點對應當前某個科室;
departmentNode.Text = departmentRow["Name"].ToString(); //科室節點的文本設為當前科室的名稱;
hospitalNode.Nodes.Add(departmentNode);
//科室節點加入當前醫院節點的節點集合,成為第1級節點之一;
foreach (DataRow diseaseRow in departmentRow.GetChildRows("Department_Disease")) //借助先前定義的數據關系,遍歷當前科室所在數據行的子行,即下屬所有疾病;
{
TreeNode diseaseNode = new TreeNode();
//聲明並實例化疾病節點,該節點對應當前某個疾病;
diseaseNode.Text = diseaseRow["Name"].ToString();
//疾病節點的文本設為當前疾病的名稱;
diseaseNode.Tag = diseaseRow["No"];
//疾病節點的標簽設為當前疾病的編號;
departmentNode.Nodes.Add(diseaseNode);
//疾病節點加入當前科室節點的節點集合,成為第2級節點之一;
}
}
}
this.trv_HospitalUnit.Nodes.AddRange(treeNodes.ToArray());
//將樹形節點列表轉為數組,並批量加入樹形視圖的節點集合;
}
private void trv_HospitalUnit_AfterSelect(object sender, TreeViewEventArgs e)
{
if (this.trv_HospitalUnit.SelectedNode.Level == 2)
//若樹形視圖的選中節點的級別為3,即選中疾病節點;
{
int diseaseNo = (int)this.trv_HospitalUnit.SelectedNode.Tag;
//將樹形視圖的選中節點的標簽轉為整型,即可獲得事先保存的疾病編號;
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=HISDatabase;uid=sa;pwd=2wsx@WSX";
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "SELECT No,Name,Phone FROM tb_Patient WHERE DiseaseNo=@DiseaseNo;"; //指定SQL命令的命令文本;該命令查詢當前選中班級的所有病人名單,以用作數據網格視圖數據源;
sqlCommand.Parameters.AddWithValue("@DiseaseNo", diseaseNo); //向SQL命令的參數集合添加參數的名稱、值;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
//聲明並實例化SQL數據適配器,同時借助構造函數,將其SelectCommand屬性設為先前創建的SQL命令;
sqlDataAdapter.SelectCommand = sqlCommand;
//將SQL數據適配器的查詢命令屬性指向SQL命令;
DataTable patientTable = new DataTable();
//聲明並實例化數據表,用於保存當前選中班級的所有病人名單,以用作數據網格視圖的數據源;
sqlConnection.Open();
//打開SQL連接;
sqlDataAdapter.Fill(patientTable);
//SQL數據適配器讀取數據,並填充疾病數據表;
sqlConnection.Close();
//關閉SQL連接;
this.dgv_Patient.DataSource = patientTable;
//設置數據網格視圖的數據源;
this.dgv_Patient.Columns["No"].HeaderText = "就診卡號";
//將數據網格視圖的指定列的表頭文本設為中文;
this.dgv_Patient.Columns["Name"].HeaderText = "姓名";
this.dgv_Patient.Columns["Phone"].HeaderText = "電話";
this.dgv_Patient.Columns[this.dgv_Patient.Columns.Count - 1].AutoSizeMode =
//數據網格視圖的最後一列的自動調整列寬模式設為填充(至數據網格視圖右側邊緣);
DataGridViewAutoSizeColumnMode.Fill;
}
}
}
}
運行如下:點擊“腦血管疾病”選項,顯示出了三位病人的信息。點擊“產前檢查”選項,顯示出了一位病人的信息。
第九周學習筆記