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