C#&SQL 第二課 執行簡單增刪改操作
阿新 • • 發佈:2018-12-11
ADO.net訪問資料庫的方式
解析1
- 連線資料庫用 Connection
- 執行SQL語句 Command
- 執行完畢後將結果一條一條的返回 DataReader
解析2
使用DataAdapte+DataSet,這種方法本質還是通過 Connection、Command、DataReader
將資料全部取出來,放到 DataSet 中
連線SQL Server
- 連線字串:程式通過連線字串 指定要連線哪臺伺服器上的、哪個例項的哪個資料庫、用什麼使用者名稱和密碼。
- ADO.net中通過SqlConnection類建立到SQL Server的連線,SqlConnection代表一個數據庫的連線,ADO.net中的連線等資源都實現了 IDisposable介面,可以使用using進行資源管理。執行備註中的程式碼如果成功了 就 OK
- Connection 的 StateChange 事件
- 操作SQL Server 資料庫使用 SqlCommand物件,SqlCommand 表示向伺服器提交的一個命令(SQL語句等),CommandText 屬性為要執行的SQL語句。
- 建立SqlCommand物件
- 通過 new 關鍵字建立
- 通過 IDbConnection.CreateCommand()方法建立(編寫通用程式碼的時候用(多型))
- 常用的三個方法
01 ExecuteNonQuery() 執行對資料的增刪改,返回影響行數,適合:insert、delete、update(對於其它語句返回 -1)
02 ExecuteScalar() 執行查詢,返回首行首列
03 ExecuteReader() 執行查詢,返回DataReader 物件
(*)StatementCompleted 事件
每條SQL語句執行完畢後觸發
多條語句同時執行(用分號隔開),如何獲取每條語句所影響的行數?//實際返回值為每條語句影響的行數的和。
程式碼分享
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; namespace _03連線資料庫實現增刪改和簡單查詢 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //向TblPerson表插入一條記錄 //1.連線資料庫 //連線字串 string constr = "Data Source=steve-pc;Initial Catalog=itcast2013;Integrated Security=True"; //建立連線物件 using (SqlConnection con = new SqlConnection(constr)) { //開啟資料連線 //如果con物件是其他地方傳遞過來的一個物件,則在開啟之前最好做判斷con.State con.Open(); //向表中插入一條資料 //先構建一個sql語句 string sql = string.Format("insert into TblPerson(uname, uage, uheight) values('{0}',{1},{2})", "黃林", 18, 175); //執行sql語句需要一個"命令物件" //建立一個命令物件 using (SqlCommand cmd = new SqlCommand(sql, con)) { //這裡要執行insert語句所以用ExecuteNonQuery()方法。 //通過呼叫該方法就會將insert語句交給資料庫引擎來執行 //這個方法的返回值是一個int型別,表示當前Sql語句執行後所影響的行數。 int r = cmd.ExecuteNonQuery(); Console.WriteLine("成功插入了{0}", r); #region SqlCommand物件常用的3個方法。 //執行sql語句 //cmd.ExecuteNonQuery() //當執行insert,delete,update語句時,一般使用該方法 //當執行返回單個值的sql語句時使用該方法。 //cmd.ExecuteScalar() //當執行Sql語句返回多行多列時,一般使用該方法。 //cmd.ExecuteReader() #endregion } } } private void button2_Click(object sender, EventArgs e) { //把Id是41的刪除 string constr = "Data Source=steve-pc;Initial Catalog=itcast2013;Integrated Security=True"; using (SqlConnection con = new SqlConnection(constr)) { string sql = string.Format("delete from TblPerson where autoId={0}", 41); using (SqlCommand cmd = new SqlCommand(sql, con)) { //儘可能晚的開啟連線 con.Open(); int r = cmd.ExecuteNonQuery(); //使用完畢後儘可能早的關閉連線 con.Close(); Console.WriteLine("刪除了{0}行。", r); } } MessageBox.Show("ok"); } private void button3_Click(object sender, EventArgs e) { //更新操作 string constr = "Data Source=steve-pc;Initial Catalog=itcast2013;Integrated Security=True"; using (SqlConnection con = new SqlConnection(constr)) { string sql = string.Format("update TblPerson set uname='{0}' where autoId={1}", "許正龍", 40); using (SqlCommand cmd = new SqlCommand(sql, con)) { con.Open(); int r = cmd.ExecuteNonQuery(); con.Close(); MessageBox.Show("更新了" + r + "行。"); } } } } }