ExecuteNonQuery方法、ExecuteScalar方法、ExecuteReader方法的區別
----ExecuteNonQuery():執行命令對象的SQL語句,返回一個int類型變量,如果SQL語句是對數據庫的記錄進行操作(如記錄的增加、刪除和更新),那么方法將返回操作所影響的記錄條數。
----ExecuteScalar():執行命令對象的SQL語句,如果SQL語句是SELECT查詢,則僅僅返回查詢結果集中的第1行第1列,而忽略其他的行 和列。該方法所返回的結果為object類型,在使用之前必須強制轉換為所需的類型。如果SQL語句不是SELECT查詢,則返回結果沒有任何作用。
----ExecuteReader():執行命令對象的SQL語句,在ADO.NET中,就是DataReader對象的ExecuteReader()方法來進行數據的列出,並且我們用這個ExecuteReader()方法來顯示數據是最快的一種方法,因為當我們在用ExecuteReader()方法中的DataReader 對象來進行數據的在網站建設中顯示時,他只可以一條一條向前讀,不能返回,也就是像ASP中的ADO方法中的Recordset 對象的Movenext一樣,它沒有move -1這樣的返回方法。
讀取方式一:executereader方式讀取數據,具有時效性,只讀,具有較高的讀取效率
//說明:程序代碼中data source 表示運行數據庫對應的計算機名,initial catalog表示所使用的數據庫名。uid為指定的數據庫用戶名,pwd為指定的用戶口令。
//sa登錄方式,data source表示服務器地址,initial catalog表示數據庫名字,user id表示賬號名,pwd表示賬號密碼。
string constr = "data source=.;initial catalog=QPMES_DEV;user id=sa;pwd=sa";
//創建新的SQL鏈接
SqlConnection con = new SqlConnection(constr);
//創建SQL語句
string sql = "select * from Test_LEO_PC";
//創建數據庫命令
SqlCommand com = new SqlCommand(sql, con);
try
{
//打開數據庫
con.Open();
//executereader的方式讀取數據庫數據,這種方式讀取數據快
SqlDataReader myReader;
//執行數據庫數據
myReader = com.ExecuteReader();
//逐行讀取數據
while (myReader.Read())
{
Console.WriteLine("名字是{0},年齡是{1},地址是{2}", myReader.GetString(0), myReader.GetInt32(1), myReader.GetString(2));
//resultData.Add(new DataLink() { Name = myReader.GetString(0), Age = myReader.GetInt32(1), Address = myReader.GetString(2) });
}
}
catch (Exception)
{
throw;
}
finally
{
con.Close();
}
讀取方式二:通過dataset設置數據庫,其中DataSet會創建一個本地數據表,SqlDataAdapter用來操作本地數據庫,並與服務器數據庫進行交互,當建立本地數據表並調用Fill()函數填充數據表后,可以關閉與數據庫服務器的連接,當操作完成后,再建立連接把本地數據庫更新到服務器中。
SqlDataAdapter有兩個有用的方法,分別為 fill 和 update。下面分別來介紹這兩方法。
-
fill 方法
fill 方法是用來填充 DataSet 的。也就是,把數據庫中的運送到C#空間。fill 有13個重載的方法,在使用時可以根據情況選擇使用。使用 FillSchema,讓 SqlDataAdapter 創建DataSet 的架構,並在用數據填充它之前就將主鍵信息包括進去。 -
update 方法
update 方法是用來更改數據庫的。也就是,把C#內存中修改的內容同步到數據庫中。更新是逐行進行的。對於插入、修改和刪除,Update 方法會自動確定類型(Insert、Update 或 Delete)。
static void Main(string[] args)
{
//說明:程序代碼中data source 表示運行數據庫對應的計算機名,initial catalog表示所使用的數據庫名。uid為指定的數據庫用戶名,pwd為指定的用戶口令。
string constr = "data source=.;initial catalog=QPMES_DEV;user id=sa;pwd=sa";
SqlConnection con = new SqlConnection(constr);
string sql = "select * from Test_LEO_PC";
SqlCommand com = new SqlCommand(sql, con);
try
{
con.Open();
//創建SqlDataAdapter對象
SqlDataAdapter da = new SqlDataAdapter();
//設置命令語句
da.SelectCommand = com;
//設置數據庫
DataSet ds = new DataSet();
//創建一張名稱為“try”的表,並通過fill方法把所有數據導入表中。
da.Fill(ds, "try");
//讀取數據的方式,通過遍歷的方式,遍歷行DataRow和列DataColumn。
foreach(DataRow mDr in ds.Tables[0].Rows)
{
Console.WriteLine("{0},{1},{2}", mDr[0], mDr[1], mDr[2]);
}
}
catch (Exception)
{
throw;
}
finally
{
con.Close();
}
}
dataset的update功能demo
conn = new SqlConnection(connStr);
//打開數據庫連接
conn.Open();
string sql = "select * from userinfo";
//創建SqlDataAdapter類的對象
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
//創建DataSet類的對象
DataSet ds = new DataSet();
//使用SQLDataAdapter對象sda將查詢結果填充到DataTable對象ds中
sda.Fill(ds);
//創建SqlCommandBuilder類的對象
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(sda);
//創建DataRow類的對象
DataRow dr = ds.Tables[0].NewRow();
//設置name列的值
dr["name"] = textBox1.Text;
//設置password列的值
dr["password"] = textBox2.Text;
//向DataTable對象中添加一行
ds.Tables[0].Rows.Add(dr);
//更新數據庫
sda.Update(ds);
補充關鍵點:
1、聲明sqldataadapter的幾種方法
https://blog.csdn.net/gatieme/article/details/20695853
2、遍歷dataset表的幾種方法
https://www.cnblogs.com/hailexuexi/p/5323967.html
3、數據庫的基本概念和面試題
https://www.cnblogs.com/wenxiaofei/p/9853682.html