第二週學習筆記--ADO.Net之SqlConnection、 Sqlcommand的應用
第二週學習筆記 ADO.Net之SqlConnection、 Sqlcommand的應用 思維導圖: 一.SqlConnection物件 使用SqlConnection類可以連線到SQL Server資料庫。SqlConnection物件的主要屬性和方法如下:
屬性 ConnectionString 連線字串
方法
Open 開啟資料庫連線
Close 關閉資料庫連線
連線資料庫主要分以下3步:
1.1定義字串
我們可以使用Window身份驗證和SQL Server身份驗證這兩種不同方式來連線SQL Server資料庫。
1)Window驗證連線字串如下:
Server=(Local);Database=EduBaseDemo;Integrated Security=sspi;
說明:Server表示執行SQL Server的伺服器,(Local)代表本機;Database表示所使用的資料庫名;Integrated Security為sspi表示採用整合的Window身份驗證,也可以使用True和false來表示,這裡sspi等價True。
2)使用SQL Server身份驗證連線字串如下:
SqlConnection sqlConnection = new SqlConnection();//建立SqlConnection物件
sqlConnection.ConnectionString =”server=(伺服器名);Integrated Security=false;DataBase= EduBaseDemo;uid=jsj;
2.1 加入異常處理 2.1.1try…catch…finally語句塊 當訪問資料庫的時候,可能會出現資料庫伺服器沒有開啟,連線中斷等各種異常情況,為了使應用程式能處理這些突發情況,.NET提供了try…catch…finally語句塊來進行異常處理,如下面程式碼: SqlConnection sqlConnection = new SqlConnection(); sqlConnection.ConnectionString =”Server=(local);Database=EduBaseDemo;Integrated Security=sspi”; try{ sqlConnection.Open(); MessageBox.Show(“資料庫連線成功”); } catch (SqlException sqlEx) //捕捉SQL異常;{ MessageBox.Show(“sqlEx.ToString()); } finally //結束;{ sqlConnection.Close(); }
這樣就防止了註冊使用者已存在而是資料庫插入資料異常引起的應用程式錯誤。 2.1.2 using語句 為了簡化異常處理的程式碼,C#提供了using語句,SqlConnection物件會在using程式碼塊結尾處自動關閉,程式碼如下:
SqlConnection sqlConnection = new SqlConnection(); sqlConnection.ConnectionString = “Server=(local);Database=EduBaseDemo;Integrated Security=sspi”; Using (SqlConnection sqlConnection=new SqlConnection()){ sqlConnection.Open(); MessageBox.Show(“資料庫連線成功”); }
二.Sqlcommand物件 Sqlcommand物件用於執行具體的SQL語句,如增加、刪除、修改、查詢等。 2.1 Sqlcommand物件具有以下屬性
Connection 獲取或設定SqlCommand的例項使用的SqlConnection。 CommandText 獲取或設定要對資料來源執行的Transact-SQL語句或儲存過程。
2.2 Sqlcommand物件的幾個重要方法如下:
ExecuteScalar 執行查詢,並返回查詢結果中第一列的值,型別是object ExecuteNonQuery 執行SQL語句並返回受影響的行數 ExecuteReader 執行查詢命令,返回SqlDataReader物件
2.2 Sqlcommand物件的使用步驟如下: 1)建立Sqlcommand物件 按照上文介紹的方法建立SqlConnection物件。
2)定義SQL語句 將所要執行的SQL語句賦給字串。程式碼如下 sqlCommand.CommandText =”SELECT COUNT(1) FROM tb_User”+ ” WHERE No=’” + this.txb_UserNo.Text.Trim() + “’”+ ” AND Password= ‘” + this.txb_Password.Text.Trim() + “’”; 注意:但是這種直接賦值很容易受到sql的注入式攻擊。 所以推薦使用用帶引數的SQL語言程式碼如下: sqlCommand.CommandText =”INSERT tb_User (No,Password) VALUES (@No,HASHBYTES (‘MD5’,@Password));”; sqlCommand.Parameters.AddWithValue(“@No”,this.txb_UserNo.Text.Trim()); sqlCommand.Parameters.AddWithValue(“@Password”,this.txb_Password.Text.Trim()); sqlCommand.Parameters[“@Password”].SqlDbType = SqlDbType.VarChar;
3)建立Sqlcommand物件 我們可以調運Sqlcommand類的構造方法建立Sqlcommand物件,傳入2個引數,即SQL語句和Sqlcommand物件程式碼如下: SqlCommand sqlCommand = sqlConnection.CreateCommand();
4)呼叫Sqlcommand物件的某個方法,執行SQL語句。 注意:在呼叫Sqlcommand物件的方法之前,一定要開啟資料庫連線。 SqlCommand sqlcommand = new SqlCommand(); sqlcommand.Connection = sqlconnection; sqlcommand.CommandText = “select COUNT(1) from tb_stuinfo where [email protected] and [email protected] “; sqlcommand.Parameters.AddWithValue(“@name”,txt_number.Text.Trim()); sqlcommand.Parameters.AddWithValue(“@pwd”, txt_pwd.Text.Trim()); sqlconnection.Open(); int rowCount = (int)sqlcommand.ExecuteScalar() sqlconnection.Close();