string ConnStr = "Data Source=.;Initial Catalog=ADO_DEMO;Integrated Security=True"; #region SqlConnection使用 //第一步:新建SqlConnection對象 SqlConnection SqlConn = new SqlConnection(); //設置SqlConnection對象的鏈接字符串; SqlConn.ConnectionString = ConnStr; //若是用DataSet或者DataTable,能夠不用打開數據庫,不然必須打開數據庫 SqlConn.Open(); #endregion #region SqlCommand對象的增、刪、改操做 //新建SqlCommand對象 SqlCommand cmd = new SqlCommand(); //設置SqlCommand對象的Connection屬性,即:SqlConn(SqlConnection類型的對象) cmd.Connection = SqlConn; //若是是執行INSERT/UPDATE/DELETE的SQL語句,能夠直接設置CommandText屬性 //若是是執行存儲過程,則必須設置CommandType屬性爲CommandType.StoredProcedure cmd.CommandText = "INSERT INTO Ex_Class VALUES('1707A',19)"; //設置完Connection屬性及CommandText屬性後能夠直接執行SQL語句 //cmd.ExecuteNonQuery(); //執行完成後要關閉數據庫,而且釋放資源 SqlConn.Close(); SqlConn.Dispose(); #endregion #region 利用SqlCommand對象和SqlDataReader對象獲取數據(記錄集) //判斷若是鏈接沒有打開,是關閉狀態,就打開數據庫 if(SqlConn.State == ConnectionState.Closed) { SqlConn.ConnectionString = ConnStr; SqlConn.Open(); } //新建SqlCommand對象 SqlCommand cmd_select = new SqlCommand(); //設置SqlCommand對象的Connection屬性,即:SqlConn(SqlConnection類型的對象) cmd_select.Connection = SqlConn; //若是是執行INSERT/UPDATE/DELETE的SQL語句,能夠直接設置CommandText屬性 //若是是執行存儲過程,則必須設置CommandType屬性爲CommandType.StoredProcedure cmd_select.CommandText = "SELECT * FROM Ex_Class"; //調用ExecuteReader方法並用SqlDataReader對象接收返回的記錄; SqlDataReader sdr = cmd_select.ExecuteReader(); //若是SqlDataReader返回的只有一條記錄,能夠用下面的方法來獲取; if(sdr.Read()) { string ClassName = sdr["ClassName"].ToString(); int ClassCount = Convert.ToInt32(sdr["ClassCount"]); Response.Write(string.Format("SqlDataReader返回一條記錄:ClassName:{0} ClassCount:{1}<br><br>", ClassName, ClassCount)); } //若是SqlDataReader返回的是多條記錄,能夠用下面的方法來獲取記錄,並存儲集合 List<Model> DataList = new List<Model>(); while(sdr.Read()) { Model m = new Model(); m.ClassName = sdr["ClassName"].ToString(); m.ClassCount = Convert.ToInt32(sdr["ClassCount"]); DataList.Add(m); } //而後能夠使用集合中的數據,好比: foreach(var p in DataList) { Response.Write(string.Format("SqlDataReader返回多條記錄:ClassName:{0} ClassCount:{1}<br><br>", p.ClassName, p.ClassCount)); } //注意SqlDataReader使用完後要關閉和釋放資料 sdr.Close(); sdr.Dispose(); SqlConn.Close(); SqlConn.Dispose(); #endregion #region 利用DataTable對象獲取數據(記錄集) /*注意:若是DataTable獲取記錄,不用打開數據庫,即Open()*/ SqlConn.ConnectionString = ConnStr; //新建SqlCommand對象 SqlCommand cmd_datatable = new SqlCommand(); //設置SqlCommand對象的Connection屬性,即:SqlConn(SqlConnection類型的對象) cmd_datatable.Connection = SqlConn; //若是是執行INSERT/UPDATE/DELETE的SQL語句,能夠直接設置CommandText屬性 //若是是執行存儲過程,則必須設置CommandType屬性爲CommandType.StoredProcedure cmd_datatable.CommandText = "SELECT * FROM Ex_Class"; //新建一個SqlDataAdapter對象,用來向DataTable填充數據 SqlDataAdapter sda = new SqlDataAdapter(); //設置SqlDataAdapter對象對應的SqlCommand對象 sda.SelectCommand = cmd_datatable; //新建一個DataTable對象,用來接收SqlDataAdapter對象傳遞過來的數據 DataTable dt = new DataTable(); //調用SqlDataAdapter對象的Fill方法,將數據填充到DataTable sda.Fill(dt); //接下來能夠使用DataTable中的數據,好比獲取第一行的值: string MyClassName = Convert.ToString(dt.Rows[0]["ClassName"]); int MyClassCount = Convert.ToInt32(dt.Rows[0]["ClassCount"]); Response.Write(string.Format("DataTable返回一條記錄:ClassName:{0} ClassCount:{1}<br><br>", MyClassName, MyClassCount)); //也能夠使用foreach遍歷DataTable中的數據 List<Model> DList = new List<Model>(); foreach(DataRow dr in dt.Rows) { Model Obj = new Model(); Obj.ClassName = Convert.ToString(dr["ClassName"]); Obj.ClassCount = Convert.ToInt32(dr["ClassCount"]); DList.Add(Obj); //或者直接輸出值 Response.Write(string.Format("DataTable返回多條記錄:ClassName:{0} ClassCount:{1}<br><br>", dr["ClassName"], dr["ClassCount"])); } //若是用DataTable返回一個List類型,除了上面手工轉換,還能夠使用下面的方法 //注意:須要引入using Newtonsoft.Json命名空間 //第一步:將DataTable中的數據庫序列化爲一個字符串 var json = JsonConvert.SerializeObject(dt); List<Model> NewList = new List<Model>(); //第二步:將序列化的字符串反序列化爲一個List對象 NewList = JsonConvert.DeserializeObject<List<Model>>(json); #endregion #region 利用SqlCommand調用存儲過程 if (SqlConn.State == ConnectionState.Closed) { SqlConn.ConnectionString = ConnStr; SqlConn.Open(); } //新建SqlCommand對象 SqlCommand cmd_proc = new SqlCommand(); //設置SqlCommand對象的Connection屬性,即:SqlConn(SqlConnection類型的對象) cmd_proc.Connection = SqlConn; //若是SqlCommand對象執行的是存儲過程,則必需設置SqlCommand對象的CommandType爲CommandType.StoredProcedure cmd_proc.CommandType = CommandType.StoredProcedure; //設置SqlCommand對象調用的存儲過程名稱 cmd_proc.CommandText = "PROC_Ex_Class"; //設置存儲過程須要的參數 //若是是輸入參數須要直接賦值,若是是輸出參數或者返回值,則只須要設置參數的Direction屬性 SqlParameter sql_parm1 = new SqlParameter("@ClassName", SqlDbType.NVarChar, 50); //設置輸入參數的值 sql_parm1.Value = "1909B"; //將參數添加進SqlCommand對象的Parameters集合 cmd_proc.Parameters.Add(sql_parm1); //第2個參數 SqlParameter sql_parm2 = new SqlParameter("@ClassCount", SqlDbType.NVarChar, 50); //設置輸入參數的值 sql_parm2.Value = 10; //將參數添加進SqlCommand對象的Parameters集合 cmd_proc.Parameters.Add(sql_parm2); //第3個參數:設置輸出參數的Direction屬性,無需設置值 SqlParameter sql_parm3 = new SqlParameter("@Info", SqlDbType.NVarChar, 100); sql_parm3.Direction = ParameterDirection.Output; cmd_proc.Parameters.Add(sql_parm3); //第4個參數:設置存儲過程返回值的Direction屬性,無需設置值 SqlParameter sql_parm4 = new SqlParameter("@ReturnVal", SqlDbType.NVarChar, 100); sql_parm4.Direction = ParameterDirection.ReturnValue; cmd_proc.Parameters.Add(sql_parm4); //調用SqlCommand對象的ExecuteNonQuery方法,執行存儲過程 cmd_proc.ExecuteNonQuery(); //存儲過程執行完成後,輸出參數和返回值參數自動會被賦值 //這是存儲過程的輸出參數 string info = Convert.ToString(sql_parm3.Value); //這是存儲過程的返回值 int returnval = Convert.ToInt32(sql_parm4.Value); //咱們能夠把兩個結果輸出 Response.Write(string.Format("存儲過程執行結果:輸出參數:{0},返回值:{1}", info, returnval)); #endregion