ADO.NET五大對象增刪改查使用

            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
相關文章
相關標籤/搜索