如何在前端操作數據庫


知識點描述:

 1、對數據 庫進行非連接式查詢操作,返回多條記錄,通過SqlDataAdapter對象的Fill方法完成, 把查詢得到的結果填充到DateTable(DateSet)對象中。

2、對數據庫進行連接式查詢操作,返回多條查詢記錄,通過SqlCommand對象的ExcuteReader方法來完成,返回SQLDateReader對象

3、從數據庫中檢索單個值,通過Sqlcommand對象的ExcuteScalar方法來完成。需要根據實際情況進行類型的轉換

4、對數據庫進行增,刪,改操作。通過SqlCommand對象的ExcuteNonQuery方法完成。返回數據庫中受影響的行數。

 

 

思維導圖:

 

 

 

示例效果圖:(向數據庫中添加數據)

 

示例窗體代碼;

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;

namespace 電子病歷系統
{
public partial class 入院記錄 : Form
{
public 入院記錄()
{
InitializeComponent();
}



private void 返回ToolStripMenuItem_Click(object sender, EventArgs e)
{
首頁 f2 = new 首頁();
this.Hide();
f2.Show();
}

private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection();                                               //聲明並實例化SQL連接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;                              //配置管理器從配置文件讀取連接字符串,並將之賦予SQL連接的連接字符串屬性;
SqlCommand sqlCommand = new SqlCommand();                                                        //聲明並實例化SQL命令;
sqlCommand.Connection = sqlConnection; //將SQL命令的連接屬性指向SQL連接;
sqlCommand.CommandText ="INSERT 入院記錄 (姓名,性別,年齡,科室,住院號,床號,入院時間,記錄時間,出生地,婚姻,職業,民族,病情陳訴者,主訴,現病史,既往史,個人史,遺傳史,過敏史,醫生簽名)

VALUES(@姓名,@性別,@年齡,@科室,@住院號,@床號,@入院時間,@記錄時間,@出生地,@婚姻,@職業,@民族,@病情陳訴者,@主訴,@現病史,@既往史,@個人史,@遺傳史,@過敏史,@醫生簽名);";
sqlCommand.Parameters.AddWithValue("@姓名", cob_姓名 .Text.Trim()); //向SQL命令的參數集合添加參數的名稱、值;
sqlCommand.Parameters.AddWithValue("@性別", cob_性別.SelectedItem);
sqlCommand.Parameters.AddWithValue("@年齡", txt_年齡 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@科室", cob_科室.SelectedItem);
sqlCommand.Parameters.AddWithValue("@住院號", txt_住院號.Text.Trim());
sqlCommand.Parameters.AddWithValue("@床號", cob_床號.SelectedItem);

sqlCommand.Parameters.AddWithValue("@入院時間", txt_入院時間 .Text.Trim());            //向SQL命令的參數集合添加參數的名稱、值;
sqlCommand.Parameters.AddWithValue("@記錄時間", txt_記錄時間 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@出生地", txt_出生地 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@婚姻", cob_婚姻.SelectedItem);
sqlCommand.Parameters.AddWithValue("@職業", txt_職業 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@民族", cob_民族.SelectedItem);


sqlCommand.Parameters.AddWithValue("@病情陳訴者", cob_病情陳訴者.SelectedItem);          //向SQL命令的參數集合添加參數的名稱、值;
sqlCommand.Parameters.AddWithValue("@主訴",txt_主訴 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@現病史", txt_現病史 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@既往史",txt_既往史 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@個人史", txt_個人史 .Text.Trim());
sqlCommand.Parameters.AddWithValue("@遺傳史", txt_遺傳史 .Text.Trim());

sqlCommand.Parameters.AddWithValue("@過敏史", txt_過敏史 .Text.Trim());

sqlCommand.Parameters.AddWithValue("@醫生簽名", txt_醫生簽名 .Text.Trim());


sqlConnection.Open();                 //打開SQL連接;
int rowAffected = sqlCommand.ExecuteNonQuery();            //調用SQL命令的方法ExecuteNonQuery來執行命令,向數據庫寫入數據,並返回受影響行數;
sqlConnection.Close();              //關閉SQL連接;
MessageBox.Show("保存成功");             //在消息框顯示受影響行數;
}

}

}

 

示例窗體代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
//添加調用:
using System.Data.SqlClient; //包含訪問SQL Server所需的各類對象;

namespace Ex53_Table_Search
{

public partial class frm_CourseTable : Form
{

/// <summary>
/// 私有字段:課程數據表;
/// </summary>
private DataTable CourseTable;

/// <summary>
/// 私有字段:先修課程數據表;
/// </summary>
private DataTable PreCourseTable;

/// <summary>
/// 私有字段:按名稱排序的課程數據視圖;
/// </summary>
private DataView CourseViewByName;

/// <summary>
/// 公有方法:構造函數;
/// </summary>
public frm_CourseTable()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen; //本窗體啟動位置設為屏幕中央;
this.dgv_Course.AllowUserToAddRows = false; //數據網格視圖不允許用戶添加行;
this.dgv_Course.RowHeadersVisible = false; //數據網格視圖的行標題不可見;
this.dgv_Course.BackgroundColor = Color.White; //數據網格視圖的背景色設為白色;
this.dgv_Course.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells; //數據網格視圖的自動調整列寬模式設為顯示所有單元格;
}

/// <summary>
/// 私有方法:點擊載入按鈕;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Load_Click(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection(); //聲明並實例化SQL連接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
SqlCommand sqlCommand = new SqlCommand(); //聲明並實例化SQL命令;
sqlCommand.Connection = sqlConnection; //將SQL命令的連接屬性指向SQL連接;
sqlCommand.CommandText = "SELECT * FROM tb_Course;"; //指定SQL命令的命令文本;該命令查詢所有課程,以用作數據網格視圖數據源;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //聲明並實例化SQL數據適配器;
sqlDataAdapter.SelectCommand = sqlCommand; //將SQL數據適配器的查詢命令屬性指向SQL命令;
sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; //設置SQL數據適配器在缺少架構時的動作為追加主鍵,從而獲取數據庫中定義的主鍵;
this.CourseTable = new DataTable(); //實例化本窗體的課程數據表,用於保存所有課程,以用作數據網格視圖數據源;
sqlConnection.Open(); //打開SQL連接;
sqlDataAdapter.Fill(this.CourseTable); //SQL數據適配器讀取數據,並填充課程數據表;
sqlConnection.Close(); //關閉SQL連接;
this.PreCourseTable = this.CourseTable.Copy(); //借助本窗體的課程數據表的方法Copy來復制數據表,並賦予本窗體的先修課程數據表,用作先修課程下拉框的數據源;
this.CourseViewByName = new DataView(); //實例化本窗體的課程數據視圖,用於按照名稱進行快速查詢;
this.CourseViewByName.Table = this.CourseTable; //設置課程數據視圖對應的數據表;
this.CourseViewByName.Sort = "Name ASC"; //設置課程數據視圖的排序條件,即查詢所覆蓋的列;
this.dgv_Course.Columns.Clear(); //數據網格視圖的列集合清空;
this.dgv_Course.DataSource = this.CourseTable; //將數據網格視圖的數據源設為學生數據表;
this.dgv_Course.Columns["No"].HeaderText = "編號"; //將數據網格視圖的指定列的表頭文本設為中文;
this.dgv_Course.Columns["Name"].HeaderText = "名稱";
this.dgv_Course.Columns["Credit"].HeaderText = "學分";
this.dgv_Course.Columns["StudyType"].HeaderText = "修讀類型";
this.dgv_Course.Columns["ExamType"].HeaderText = "考試類型";
this.dgv_Course.Columns["Pinyin"].Visible = false; //將數據網格視圖的指定列設為不可見;
this.dgv_Course.Columns["PreCourseNo"].Visible = false;
this.dgv_Course.Columns[this.dgv_Course.Columns.Count - 1].AutoSizeMode = //數據網格視圖的最后一列的自動調整列寬模式設為填充(至數據網格視圖右側邊緣);
DataGridViewAutoSizeColumnMode.Fill;
DataGridViewComboBoxColumn preCourseColumn = new DataGridViewComboBoxColumn(); //聲明並實例化數據網格視圖下拉框列,用於設置先修課程;
preCourseColumn.Name = "PreCourse"; //設置下拉框列的名稱;
preCourseColumn.HeaderText = "先修課程"; //設置下拉框列的表頭文本;
preCourseColumn.DataSource = this.PreCourseTable; //設置下拉框列的數據源為先修課程數據表;
preCourseColumn.DisplayMember = "Name"; //設置下拉框列的顯示成員為(先修課程數據表的)名稱(列);
preCourseColumn.ValueMember = "No"; //設置下拉框列的值成員為(先修課程數據表的)編號(列);
preCourseColumn.DataPropertyName = "PreCourseNo"; //設置下拉框列的數據屬性名稱為(課程數據表的)先修課程編號(列);
preCourseColumn.DisplayIndex = 3; //設置下拉框列的顯示順序;
preCourseColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; //設置下拉框列的自動調整列寬模式為填充;
this.dgv_Course.Columns.Add(preCourseColumn); //將下拉框列加入數據網格視圖的列集合;
}

/// <summary>
/// 私有方法:點擊根據編號搜索按鈕;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_SearchByNo_Click(object sender, EventArgs e)
{
DataRow searchResultRow = this.CourseTable.Rows.Find(this.txb_CourseNo.Text.Trim()); //借助本窗體的課程數據表的行集合的方法Find,根據主鍵值(即課程編號)快速查找相應課程,並返回其所在的數據行;但數據行不能作為數據源,需另行創建數據表,並導入該數據行,最后將數據表作為數據源;
DataTable searchResultTable = this.CourseTable.Clone(); //借助本窗體的課程數據表的方法Clone,創建相同架構的空表,用於保存搜索結果所在數據行;
searchResultTable.ImportRow(searchResultRow); //將(復制后的)數據行導入數據表;
this.dgv_Course.DataSource = searchResultTable; //將數據網格視圖的數據源設為搜索結果數據表;
}

/// <summary>
/// 私有方法:點擊根據名稱搜索按鈕;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_SearchByName_Click(object sender, EventArgs e)
{
DataRowView[] searchResultRowViews =
this.CourseViewByName.FindRows(this.txb_CourseName.Text.Trim()); //借助本窗體的按名稱排序的課程數據視圖的方法FindRows,根據排序列(即課程名稱)快速查找相應課程;由於該列並非主鍵,可能返回多行查詢結果,故返回數據行視圖數組;數據行視圖數組不能直接作為數據源,需轉為列表后方可作為數據源;
DataTable searchResultTable = this.CourseTable.Clone(); //借助本窗體的課程數據表的方法Clone,創建相同架構的空表,用於保存搜索結果所在數據行;
foreach (DataRowView dataRowView1 in searchResultRowViews) //遍歷搜索結果所在數據行視圖數組;
{
searchResultTable.ImportRow(dataRowView1.Row); //通過每條數據行視圖的屬性Row獲取相應的數據行,並導入數據表;
}
this.dgv_Course.DataSource = searchResultTable; //將數據網格視圖的數據源設為搜索結果數據表;
}

/// <summary>
/// 私有方法:拼音文本框的文本更改;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txb_Pinyin_TextChanged(object sender, EventArgs e)
{
DataRow[] searchResultRows =
this.CourseTable.Select("Pinyin LIKE '%" + this.txb_Pinyin.Text.Trim() + "%'"); //借助本窗體的課程數據表的方法Select,並提供與SQL類似的謂詞表達式作為查詢條件,根據拼音縮寫進行模糊查詢(僅支持%通配符);查詢將返回數據行數組;
DataTable searchResultTable = this.CourseTable.Clone(); //借助本窗體的課程數據表的方法Clone,創建相同架構的空表,用於保存搜索結果所在數據行;
foreach (DataRow row in searchResultRows) //遍歷搜索結果所在數據行數組;
{
searchResultTable.ImportRow(row); //數據行導入數據表;
}
this.dgv_Course.DataSource = searchResultTable; //將數據網格視圖的數據源設為搜索結果數據表;
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM