在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
/// 讀取SQL Server數據,使用DataSet /// </summary> private void DataSerConnection() { try { // 1、 /*//SqlConnection 表示與SQL Server 数据库的一个打开的连接。作用:控制到SQL Server的連接 //(如果有可用的開啟連接,則 SqlConnection 會從連接集區取出開啟的連接。否則,它會建立與 SQL Server 之執行個體的新連接。) SqlConnection dataConnection = new SqlConnection(); //ConnectionString 取得或設定用來開啟 SQL Server 資料庫的字串。 dataConnection.ConnectionString = "Data Source=CCM02\\SQLEXPRESS;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sh2_123"; //Open 開啟資料庫連接。 dataConnection.Open(); //SqlDataAdapter 表示一組資料命令集和資料庫連接 /* * 初始化 SqlDataAdapter 類別的新執行個體 * 名稱 說明 SqlDataAdapter () 初始化 SqlDataAdapter 類別的新執行個體。 SqlDataAdapter (SqlCommand) 使用指定 SqlCommand 做為 SelectCommand 屬性,初始化 SqlDataAdapter 類別的新執行個體。 SqlDataAdapter (String, SqlConnection) 使用 SelectCommand 和 SqlConnection 物件,初始化 SqlDataAdapter 類別的新執行個體。 SqlDataAdapter (String, String) 使用 SelectCommand 和連接字串,初始化 SqlDataAdapter 類別的新執行個體。 */ // 2、 SqlDataAdapter suppliersTableAdapter = new SqlDataAdapter("select * from products", dataConnection); /* * 成員名稱 說明 DataReader 從基礎資料儲存區中擷取資料做為 IDataReader DataSet 從基礎資料儲存區中擷取資料至 DataSet 結構中。 */ // 3、 DataSet dt = new DataSet(); dt.DataSetName = "Northwind"; /* * 名稱 說明 DataAdapter.FillSchema (DataSet, SchemaType) 將 DataTable 加入至指定的 DataSet,並且根據指定的 SchemaType 設定結構描述,以符合資料來源中的資料表。 DataAdapter.FillSchema (DataTable, SchemaType, IDataReader) 將 DataTable 加入指定的 DataSet。 DataAdapter.FillSchema (DataSet, SchemaType, String, IDataReader) 將 DataTable 加入指定的 DataSet。 * * SchemaType :指定如何在執行 FillSchema 作業時處理現有的結構描述 (Schema) 對應。 * 成員名稱 說明 Mapped 套用所有的現有資料表對應至內送的結構描述 (Schema)。使用變形的結構描述來設定 DataSet。 Source 忽略在 DataAdapter 上的任何資料表對應。使用內送的結構描述來設定 DataSet,而不套用任何的變形。 */ // 4、 suppliersTableAdapter.Fill(dt, "products"); /* * BindingSource * 封裝表單的資料來源。 * 名稱 說明 BindingSource () 初始化 BindingSource 類別的新執行個體成為預設屬性值。 BindingSource (IContainer) 初始化 BindingSource 類別的新執行個體,並將 BindingSource 加入指定的容器中。 BindingSource (Object, String) 使用指定的資料來源和資料成員,初始化 BindingSource 類別的新執行個體。 */ // 5、 BindingSource bd = new BindingSource(dt, "products"); //在界面上顯示資料 //dgvData: DataGridView控件 //取得或設定 DataGridView 顯示資料的資料來源。 dgvData.DataSource = bd; //6、 dataConnection.Close(); //釋放所使用的所有資源。 suppliersTableAdapter.Dispose(); } catch (Exception e) { throw e; } }
/// <summary>
/// 用DataReader讀取數據 /// </summary> private void CommandConnection() { try { SqlConnection sqlConn = new SqlConnection(); sqlConn.ConnectionString = "Data Source=CCM02\\SQLEXPRESS;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sh2_123"; sqlConn.Open(); SqlCommand sqlComad = new SqlCommand(); sqlComad.CommandType = CommandType.Text; sqlComad.Connection = sqlConn; sqlComad.CommandText = "select * from products"; //SqlDataReader:從數據庫獲取行 SqlDataReader sqlDr = sqlComad.ExecuteReader(); //FieldCount 取得目前資料列中的資料行數目。 DataTable dt = new DataTable(); int iDrCount = sqlDr.FieldCount; for (int iCnt = 0; iCnt < iDrCount; iCnt++) { string a = sqlDr.GetName(iCnt); dt.Columns.Add(a); //dt.Rows.Add((DataRow)sqlDr[iCnt]); } //將DataReader前進到下一個資料 while (sqlDr.Read()) { //定義一個數組,便於讀出每一行資料 String[] subitems = new String[iDrCount]; //用循環讀出每一行資料 for (int iCnt = 0; iCnt < iDrCount; iCnt++) { //讀出每一行資料保存到數組中 subitems[iCnt] = sqlDr[iCnt].ToString(); string sValue = sqlDr[iCnt].ToString(); } //將讀出的行資料增表的行中 dt.Rows.Add(subitems); } //DataGridView的來源為“dt”這個表 dgvData.DataSource = dt; sqlDr.Close(); sqlComad.Dispose(); sqlConn.Close(); } catch (Exception e) { throw e; } } /// <summary>
/// 用表進行填充DataGridView /// </summary> private void DataTableCommandConnect() { DataTable dtb = new DataTable(); SqlConnection sqlConn = new SqlConnection(); sqlConn.ConnectionString = "Data Source=CCM02\\SQLEXPRESS;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sh2_123"; sqlConn.Open(); SqlCommand sqlCmd = new SqlCommand(); sqlCmd.CommandType = CommandType.Text; sqlCmd.CommandText = "select * from products"; sqlCmd.Connection = sqlConn; SqlDataAdapter sqlDapter = new SqlDataAdapter(); sqlDapter.SelectCommand = sqlCmd; dtb.Clear(); //將讀出的資料填充一表dtb中 sqlDapter.Fill(dtb); //DataGridView的來源為“dt”這個表 dgvData.DataSource = dtb; sqlConn.Close(); sqlCmd.Dispose(); sqlDapter.Dispose(); }
/// <summary>
/// 保存已修改的資料 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { DataSet dsChanges = (DataSet)dtSet.GetChanges(); if (dsChanges==null) { return; } DataTable dtb = new DataTable(); dtb = dsChanges.Tables["products"]; //GetErrors方法返回一個數組,它由表中具一個或多個檢驗錯誤的行構成。如沒有誤返加空數組 DataRow[] badRows = dtb.GetErrors(); if (badRows.Length==0) { //int numRows = suppliersTableAdapter.Update(dsChanges, "products"); //要在需要时生成所需的命令,必须创建 SqlCommandBuilder 对象的实例并使用该构造函数中的 DataAdapter。 //1、 SqlCommandBuilder sqlbuiler = new SqlCommandBuilder(); sqlbuiler.DataAdapter = suppliersTableAdapter; //2、 SqlConnection dataConnection = new SqlConnection(); dataConnection.ConnectionString = "Data Source=CCM02\\SQLEXPRESS;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sh2_123"; //dataConnection.Open(); string sCmdText = "select * from products"; //3、 SqlCommand sqlComad = new SqlCommand(); //指出CommandText讀取方式 sqlComad.CommandType = CommandType.Text; //Connection:連接資料庫的Connection sqlComad.Connection = dataConnection; //CommandText:取得或設定要針對資料來源執行的文字命令。 sqlComad.CommandText = sCmdText; //4、 //suppliersTableAdapter.SelectCommand = new SqlCommand("select * from products ", dataConnection); //SelectCommand 取得或設定用來在資料來源中選取資料錄的命令。 suppliersTableAdapter.SelectCommand = sqlComad; //取得或設定接資料庫的Connection //取得或設定用來將新的資料錄插入至資料來源的命令。 //GetInsertCommand:取得在資料來源上執行插入時所需之自動產生的 DbCommand 物件。 suppliersTableAdapter.InsertCommand = sqlbuiler.GetInsertCommand(); suppliersTableAdapter.UpdateCommand = sqlbuiler.GetUpdateCommand(); suppliersTableAdapter.DeleteCommand = sqlbuiler.GetDeleteCommand(); //5、 int numRows = suppliersTableAdapter.Update(dsChanges, "products"); if (numRows>0) { MessageBox.Show("Update" + numRows + "rows", "Success"); //變更資料 dtSet.AcceptChanges(); } else { //返原所有更 dtSet.RejectChanges(); } //清除與這個 DbCommandBuilder 關聯的命令。 sqlbuiler.RefreshSchema(); //關閉聯接 dataConnection.Close(); //釋放資源 sqlComad.Dispose(); sqlbuiler.Dispose(); } else { string errorMsg = null; foreach (DataRow row in badRows) { //每一行都可能一個或多個誤,而GetColumnsInError方法將返加一個集合,其中包含了數據有問題的所有例 foreach (DataColumn col in row.GetColumnsInError()) { //GetColumnError方法獲取一個無效的列的錯誤消息。每一條錯誤消息都附加到errorMsg字符串上。 errorMsg += row.GetColumnError(col) + "\n"; } } MessageBox.Show("Errors in data:" + errorMsg, "please fix", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
/// <summary>
/// 新增按鈕,新增一個空行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAdd_Click(object sender, EventArgs e) { if (dgvData.DataSource!=null) { bd.AddNew(); } }
/// <summary>
/// 刪除按鈕,刪當前資料 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelete_Click(object sender, EventArgs e) { int iSelectRowCount = dgvData.SelectedRows.Count; int iSelectCellCount = dgvData.SelectedCells.Count; int iOldCellIndex = 0; if (iSelectCellCount>0) { //判斷是否是選擇了行 if (iSelectRowCount>0) { //循環刪除行 foreach (DataGridViewRow dgvRow in dgvData.SelectedRows) { dgvData.Rows.Remove(dgvRow); } MessageBox.Show("Delete" + iSelectRowCount + "rows", "Success"); } // 判斷是否是擇了存儲格 if (dgvData.SelectedCells.Count>0) { //定義一個ArrayList存放行資料 ArrayList al = new ArrayList(); //循環存儲格,得到行Index存入ArrayList foreach (DataGridViewCell dgvCell in dgvData.SelectedCells) { /*IndexOf:搜尋指定的 Object,並傳回在整個 ArrayList 中第一個符合元素之以零起始的索引。 如果有找到,則是在整個 ArrayList 內,value 第一次出現的以零起始的索引,否則為 -1。 */ if (al.IndexOf(dgvCell.RowIndex) == -1) { //將行號增加到數組中 al.Add(dgvCell.RowIndex); } } foreach (int iIndex in al) { dgvData.Rows.RemoveAt(iIndex); } } } #region 當選擇行時,刪除該行 //int iSelectRowCount = dgvData.SelectedRows.Count; //if (dgvData.SelectedRows.Count > 0) //{ // foreach (DataGridViewRow dgvRow in dgvData.SelectedRows) // { // dgvData.Rows.Remove(dgvRow); // } // MessageBox.Show("Delete" + iSelectRowCount + "rows", "Success"); //} #endregion #region 當選擇存儲格時,刪除該存儲的行 //當選擇的存儲格大於0時(即選擇了多行) //if (dgvData.SelectedCells.Count >0) //{ // int iSelectCellsCount = dgvData.SelectedCells.Count; // //刪除方法1 // foreach (DataGridViewCell dgvCell in dgvData.SelectedCells) // { // int iRowIndex = dgvCell.RowIndex; // dgvData.Rows.RemoveAt(iRowIndex); // } //刪除方法2 //循環刪除時的方法,(要先刪除前一筆,在刪除下一筆,要不然會出錯) //for (int iCellsCount = iSelectRowCount-1; iCellsCount >=0 ; iCellsCount--) //{ // int iRowIndex = dgvData.SelectedCells[iCellsCount].RowIndex; // //取得所選資料行的索引 // dgvData.Rows.RemoveAt(iRowIndex); //} //} #endregion //刪除當前資料行 方法1 //dgvData.Rows.Remove(dgvData.CurrentRow); //刪除當前資料行 方法2 //dgvData.Rows.RemoveAt(dgvData.CurrentCell.RowIndex); //刪除當前資料行 方法3 //bd.RemoveCurrent(); } |
请发表评论