1. 程式人生 > >第九周學習筆記

第九周學習筆記

relation dem 清空 com provider oar 行記錄 add []

第九周學習筆記

一、本周首先講了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;

}

}

}

}

運行如下:點擊“腦血管疾病”選項,顯示出了三位病人的信息。點擊“產前檢查”選項,顯示出了一位病人的信息。

技術分享圖片

技術分享圖片

第九周學習筆記