WinFrom日記————ExecuteReader、ExecuteNonQuery、ExecuteScalar使用方法

WinFrom日記————ExecuteReader、ExecuteNonQuery、ExecuteScalar使用方法

在寫C#的時候,獲取數據庫數據的時候會用到ExecuteReader、ExecuteNonQuery、ExecuteScalar等對象和方法,剛開始給自己整蒙了,不知道怎麼用用哪個,程序第一部分的內容寫的差不多了,寫幾篇博客做一些總結
數據庫連接方法:https://blog.csdn.net/weixin_44546342/article/details/106303336
一、ExecuteScalar執行方法

			string Sql_Str = "update T_users set Active=@Active where Email = @Email;SELECT id from T_users where Email=@Email;";
            SqlParameter[] sq =		
            {
                new SqlParameter("@Active",Active),
                new SqlParameter("@Email",Email)
            };
            ReadySql(Sql_Str, sq);		//參數的存儲和sql語句存儲,這是我自己封裝的方法,不必太在意
            object Result = sql_com.ExecuteScalar();
            if(Result != null)
            {
                MessageBox.Show("Update successful!");
            }
            else
            {
                MessageBox.Show("Something wrong!");
            }
            sql_con.Close();
            return;

ExecuteScalar()執行後,返回的是一個object類的數據,這個類型是所有類型的基類,可以進行任意的轉換,強制轉換就可以。
ExecuteScalar()執行後返回的數據庫第一條的第一列數據,就只返回一個數據,所以他適用於查詢總數,查詢單個id之類的情況下,查詢結果如圖;
在這裏插入圖片描述
二、ExecuteNonQuery執行方法

			Sql_Str = "insert into T_Office (User_id,Office) values(@User_id,@Office)";
            SqlParameter[] sql =
            {
                new SqlParameter("@Office",Office),
                new SqlParameter("@User_id",User_id)
            };
            sql_com = new SqlCommand(Sql_Str, sql_con);
            sql_com.Parameters.AddRange(sql);
            int Result = sql_com.ExecuteNonQuery();		//執行後返回的是一個整數
            if (Result>0)
            {
                MessageBox.Show("Add successful!");
            }
            else
            {
                MessageBox.Show("Something wrong!");
            }
            sql_con.Close();	//數據庫連接關閉
            //sql_con.Dispose();		

ExecuteNonQuery()方法執行後返回的是一個整數,即返回受Sql語句所影響的數據條數,這個執行方法可以用於數據插入、修改的時候,用來判斷Sql語句是否成功執行
另插一句,我之前寫的時候爲了判斷語句是否成功是在Sql語句後面加上SELECT @@Identity;
像這樣insert into T_Office (User_id,Office) values(@User_id,@Office);SELECT @@Identity;
即返回第幾條數據受影響吧好像,然後用ExecuteScalar()執行的,這個方法我覺得不太好,還是ExecuteNonQuery()比較好用,就這麼提一下,不要太在意
三、ExecuteReader()執行方法

			List<LoginList> result_list = new List<LoginList>();		//泛型集合list<>,我也是一知半解,照着用
            ReadySql(Sql_Str, sq);	//參數的存儲和sql語句存儲,這是我自己封裝的方法,不必太在意
            SqlDataReader Return_result = sql_com.ExecuteReader();
            if (Return_result.HasRows)	//使用HasRows方法判斷是否有值返回
            {
                while (Return_result.Read())	//通過循環一條一條的讀數據,
                {
                    LoginList data = new LoginList();
                    data.User_Id = (int)Return_result["id"];
                    data.User_Name = Return_result["First_name"].ToString() + " " + Return_result["Last_name"].ToString();
                    data.Role = Return_result["Role"].ToString();
                    result_list.Add(data);
                }
            }
            sql_con.Close();

泛型集合list<>

	class LoginList
    {
        public int User_Id;
        public string User_Name;
        public string Role;
    }

ExecuteReader()執行方法返回的類型是SqlDateReader,通過流得方式對查詢結果進行連接後訪問,只讀,適合數據量比較小的情況下,只能一條一條的讀數據,感覺有點類似指針。
適用於select查詢的情況,通過循環一條一條的讀取存入list內就行

以下部分摘抄自網絡:https://blog.csdn.net/yhj198927/article/details/72844155
SqlDataReader與SqlDataAdapter+DataSet的區別
一,SqlDataReader //基於連接,只讀訪問 適合數據量較小。(連接模式)
SqlDataAdapter //基於非連接,適於數據量較大時,可以另行修改,最後再把修改結果返回給數據庫。要求資源也大一點 (斷開模式)

二,SqlDataAdapter 讀取數據後將數據集放入DataSet ,DataSet 的數據存在本地客服機內存。

三,SqlDataReader返回的是一個數據讀寫器,只能一條條的讀,操作起來不靈活,一般在只讀的時候纔用到。
SqlDataAdapter返回的是數據集或者表,可以對其中的數據作任意操作

四,寫法上不同:

SqlDatReader執行前須先打開數據庫,然後鬚生成一個command對象。再由command.ExecuteReader()方法賦值。完成後須手動關閉聯接。

 		SqlCommand cmd = new SqlCommand("select * from stu", conn);
        conn.Open();
        SqlDataReader rdr = cmd.ExecuteReader();
        //。。。。。
        conn.close();

SqlDataAdapter 執行時,自動打數據庫,且不用Command的ExecuteReader方法進行賦值,完成後自動斷開聯接。

 	SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);
    DataSet ds = new DataSet();
    adptr.Fill(ds, "stu");

以上便是我總結得一點東西,如果有不對的地方請幫忙指出,相互進步,謝謝。

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