Data Source表示數據源

  這是本人在學習ADP.NET過程中所作的筆記,可作爲ADO.NET入門或者複習的教程。

  連接字符串:

  DataSource=localhost; AttchDBFilename=|DataDirectory|\Database1.mdf; InitialCatalog=UserDate; Integrated Security=True

  參數說明:

  Data Source表示數據源,其值爲服務器地址和實例名,如果是正式版則不用加SQLEXPRESS,如果是免費版,必須加上SQLEXPRESS,即連接本機可以寫成".\ SQLEXPRESS";

  AttchDBFilename表示附加數據庫,其值爲附加數據庫的地址,DataDirectory代表當前項目目錄下的App_data目錄,是數據庫的默認存儲路徑;

  Initial Catalog爲數據庫,其值爲當前連接所要連接的數據庫名稱

  注:如果要使用Sqlconnection對象,必須導入System.Data.Sqlclient命名空間

  ADO.NET中的連接等資源都實現了IDisposable接口,可以使用using進行資源管理。也可以使用try……catch語句塊括起來,但是using是最簡單的。

  代碼語句:

  using (SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=UserDate;Integrated Security=True"))

  {

  程序語句塊;

  }

  或者:

  SqlConnection cnn = new SqlConnection();//創建SqlConnection對象的一個實例 cnn.ConnectionString = "Data Source=localhost;Initial Catalog=UserDate;Integrated Security=True";

  cnn.Open();

  注:using的作用是及時的釋放資源,在花括號結束的時候,程序會自動釋放語句所申請的內存,以達到程序的最優。

  一、通過SqlCommand對象執行SQL語句

  SqlCommand對象可以執行SQL語句完成對數據庫的增、刪、改、查等數據操作。在SqlCommand類中,最主要的屬性有CommandText,該屬性用於接收要執行的SQL語句,例如cmd.CommandText = "INSERT INTOb1(name, company, position, shijian) VALUES(@Name, @Company, @Position,@Datetime)",除了CommandText屬性,主要還有Connection屬性,用來接收數據庫連接,還有Transaction屬性,用來接收事物。

  其還有三個比較常用的方法,第一個是ExecuteNonQuery()方法,主要用來提交無查詢結果的SQL語句,如UPDATE,INSERT,DELETE等語句,其返回值爲數據庫中被SQL語句影響的行數,第二個是ExecuteReader()方法,主要用來提交SELECT語句,返回值是一個數據流,裏面是SELECT語句的查詢結果,可以用SqlDataReader對象來接收,然後調用其Read()方法來逐行讀出查詢結果。第三個是ExexuteScalar()方法,主要也是用來提交SELECT語句,但是其返回值是查詢結果的第一行第一列,所以適用於例如COUNT等聚合查詢。

  二、SQL注入與參數化查詢

  SQL注入是通過特殊的SQL語句非法獲取數據庫的內容。爲了保證系統不被黑客進行SQL注入攻擊,在SqlCommand執行SQL語句時,可以對提交的數據先進行參數化處理,參數化處理主要是通過SqlCommand對象的Parameters屬性的Add方法來完成,參數化處理有兩種方法,第一種既是在"執行Insert操作"中提到的,還有另外一種代碼如下:

  cmd.CommandText = "INSERT INTO b1(name, company, position, shijian) VALUES(@Name, @Company, @Position, @Datetime)";

  cmd.Parameters.Add(new SqlParameter("Name", Name.Text));

  cmd.Parameters.Add(new SqlParameter("Company", Company.Text));

  cmd.Parameters.Add(new SqlParameter("Position", Position.Text));

  cmd.Parameters.Add(new SqlParameter("Datetime", DateTime.Parse(Datetime.Text)));

  cmd.ExecuteNonQuery();

  注:以上的代碼中需要注意一點,在第一種代碼中,顯示的對各個參數的數據進行了定義,但是在上面這種代碼中,並未對參數進行數據定義,所以需要在提供數據時對數據進行適時的轉換,例如"shijian"在數據庫中定義爲DateTime類型,但是其在文本框中獲得的爲string類型,所以需要調用DateTime的Parse方法對數據進行轉換,如果數據庫中的數據是int型,在賦值時也應進行相應的轉換。

  三、執行Insert操作

  首先,需要申明一個SqlCommand對象;

  其次,用SqlConnection的CreateCommand()函數,創建一個SqlCommand對象,然後將所要執行的SQL語句賦值給SqlCommand的CommandText屬性;

  最後,調用SqlCommand類的ExexuteNonQuery()方法,執行CommandText的SQL語句。

  代碼語句:

  using(SqlCommand cmd = con.CreateComand())

  {

  cmd.CommandText = "INSERT INTO b1(name, company, position) VALUES("whh", "UVGE", "coder")";

  cmm.ExecuteNonQuery();

  }

  或者:

  using(SqlCommand cmd = con.CreateComand())

  {

  //設置SQL語句

  cmm.CommandText = "INSERT INTO b1(name, company, position, shijian) VALUES(@Name, @Company, @Position, @Datetime)";

  //創建參數,並定義其數據類型,要和數據庫中對應的字段保持相同

  cmm.Parameters.Add("@Name", SqlDbType.NVarChar);

  cmm.Parameters.Add("@Company", SqlDbType.NVarChar);

  cmm.Parameters.Add("@Position", SqlDbType.NVarChar);

  cmm.Parameters.Add("@Datetime", SqlDbType.DateTime);

  //設置參數的值,這些值來自前段的輸入信息

  cmm.Parameters["@Name"].Value = Name.Text;

  cmm.Parameters["@Company"].Value = Company.Text;

  cmm.Parameters["@Position"].Value = Position.Text;

  cmm.Parameters["@Datetime"].Value = Datetime.Text;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章