|
14.10 Command的三種方法 操作數(shù)據(jù) //ExecuteNonQuery 不返回任何值,應(yīng)用于Insert Update Delete 語(yǔ)句 mysqlCon.Open(); MessageBox.Show("數(shù)據(jù)庫(kù)打開成功"); string sql = "insert into [tablename] (EMname,age,Sex,Deptment) Values ('老神在在',25,'男','戰(zhàn)斗部')"; SqlCommand mycom = new SqlCommand(sql,mysqlCon); MessageBox.Show("創(chuàng)建對(duì)象成功"); //不返回任何值,用于Insert ,Update,Delete mycom.ExecuteNonQuery(); MessageBox.Show("數(shù)據(jù)插入成功"); //ExecuteScalar返回一個(gè)值,一般用于只返回一個(gè)值的語(yǔ)句,如數(shù)據(jù)統(tǒng)計(jì)Count,最大數(shù)Max,最小數(shù)Min //ExecuteReader返回一個(gè)IDataReader,可用于迭代返回記錄 DataReader對(duì)象提供了用順序的,只讀的方式讀取Command對(duì)象獲得的數(shù)據(jù)結(jié)果集。正是因?yàn)镈ataReader是以順序的方式連續(xù)的讀取數(shù)據(jù),所以DataReader會(huì)以獨(dú)占的方式打開數(shù)據(jù)庫(kù)連接。 由于DataReader只執(zhí)行讀操作,并且每次旨在內(nèi)存緩存區(qū)里存儲(chǔ)結(jié)果集中的一條數(shù)據(jù),所以使用DataReader對(duì)象的效率比較高,如果要查詢大量數(shù)據(jù),同時(shí)不需要隨機(jī)訪問(wèn)和修改數(shù)據(jù),DataReader是優(yōu)先的選擇。 DataReader對(duì)象常用的三個(gè)屬性 FiledCount 表示記錄中有多少字段 HasRows 表示DataReader是否包含數(shù)據(jù) IsClosed 表示DataReader是否關(guān)閉 string constr = "Server=10.8.12.12;user=XXX;pwd=XXXX;database=FFFFF"; SqlConnection mycon = new SqlConnection(constr); try { mycon.Open(); string sql = "select * from [Filetest]"; SqlCommand mycom = new SqlCommand(sql, mycon); //聲明datareader SqlDataReader mydr = mycom.ExecuteReader(); if (mydr.HasRows) { Console.Write("存在數(shù)據(jù)"); } else { Console.Write("不存在數(shù)據(jù)"); } //表的字段數(shù) Console.WriteLine(mydr.FieldCount.ToString()); mydr.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } finally { mycon.Close(); } Console.ReadKey(); } DataReader對(duì)象常用的方法 Close方法 將DataReader對(duì)象關(guān)閉 GetDataTypeName方法 取得指定字段的數(shù)據(jù)形態(tài) GetName方法 取得指定字段的字段名稱 GetOrdinal方法 取得指定字段名稱在記錄中的順序 GetValue方法 取得指定字段的數(shù)據(jù) GetValues方法 取得全部字段的數(shù)據(jù) Read方法 讀取下一條記錄 //0為第一個(gè)字段的數(shù)據(jù)類型,比如Int型 Console.WriteLine(mydr.GetDataTypeName(0)); //0為第一個(gè)字段的數(shù)據(jù)名稱,比如ID Console.WriteLine(mydr.GetName(0)); //ProgramID字段在表中的順序號(hào),比如2 Console.WriteLine(mydr.GetOrdinal("ProgramID")); //mydr.GetValue默認(rèn)指向當(dāng)前數(shù)據(jù)之前的位置,因此必須先read mydr.Read(); Console.WriteLine(mydr.GetValue(1)); //獲取所有數(shù)據(jù),一行一行的讀取,這里定義變量Object數(shù)組承載所有類型的數(shù)據(jù) object[] myobj = new object[mydr.FieldCount]; while (mydr.Read()) { mydr.GetValues(myobj); foreach (object outobj in myobj) Console.Write(outobj + "\t"); Console.WriteLine(); } //Read方法, //mydr[0].ToString()是獲取第一個(gè)字段的值, //mydr["ProgramID"].ToString()是根據(jù)字段名稱獲取值 while (mydr.Read()) { Console.Write(mydr[0].ToString() + ","); Console.Write(mydr[1].ToString() + ","); Console.Write(mydr["ProgramID"].ToString()); Console.WriteLine(); } 1,基礎(chǔ)數(shù)據(jù)配置程序,1001 2,客戶端程序,1002 3,基礎(chǔ)參數(shù)管理程序,1003 訪問(wèn)DataReader對(duì)象時(shí),使用索引要比使用字段名稱訪問(wèn)速度要快很多
|
|
|