ExecuteNonQuery()
用法:ExecuteNonQuery用來執行INSERT、UPDATE、DELETE和其他沒有返回值得SQL命令。例如:CREATE DATABASE 和 CREATE TABLE 命令。
當使用 INSERT、UPDATE、DELETE時,ExecuteNonQuery返回被命令影響的行數。若是用在對其他命令,則返回-1。
ExecuteScalar()
用法1:ExecuteScalar 執行一個SQL命令返回結果集的第一列的第一行。它經常用來執行SQL的COUNT、AVG、MIN、MAX 和 SUM 函數,這些函數都是返回單行單列的結果集。
'注意:'ExecuteScalar 一般返回一個Object類型,因此必須把它轉換為強類型。如果轉換不正確,.NET框架就會引發 InvalidCastException異常。
public string absentDayNo(DateTime sdate, DateTime edate, string idemp)
{
string result="0";
string myQuery="select COUNT(idemp_atd) absentDayNo from td_atd where ";
myQuery +=" absentdate_atd between '"+sdate+"' and '"+edate+" ";
myQuery +=" and idemp_atd='"+idemp+"' group by idemp_atd ";
SqlCommand cmd = new SqlCommand(myQuery, conn);
conn.Open();
//System.NullReferenceException occurs when their is no data/result
string getValue = cmd.ExecuteScalar().ToString();
if (getValue != null)
{
result = getValue.ToString();
}
conn.Close();
return result;
}
用法2:ExecuteScalar 的另一個普遍的用法是從資料庫中檢索BLOB(二進位大物件)。下面的例子從Pubs資料庫的Pub_Info表的Logo欄位中檢索圖像,並把他封裝到一個點陣圖中。
MemoryStream stream = new MemoryStream();
SqlConnection conn = new SqlConnection("連線字串");
try
{
conn.open();
SqlCommand cmd = new SqlCommand("SELECT logo FROM pub_info WHERE pub_id='0736'", conn);
byte[] blob = (byte[]) cmd.ExecuteScalar();
stream.Write(blob, 0, blob.Length);
Bitmap bitmap = new Bitmap(stream);
// TODO:使用點陣圖
bitmap.Dispose();
}
catch(SqlException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
stream.Close();
conn.Close();
}
{
conn.open();
SqlCommand cmd = new SqlCommand("SELECT logo FROM pub_info WHERE pub_id='0736'", conn);
byte[] blob = (byte[]) cmd.ExecuteScalar();
stream.Write(blob, 0, blob.Length);
Bitmap bitmap = new Bitmap(stream);
// TODO:使用點陣圖
bitmap.Dispose();
}
catch(SqlException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
stream.Close();
conn.Close();
}
用法3:您也許對如何把BLOB寫入資料庫感興趣,答案是在包裝了INSERT命令(該命令中包含了類型為byte[]的輸入參數)的命令物件上調用ExcuteNonQuery方法。下面例子在Pubs資料庫的Pub_Info表中插入一條記錄,記錄的Logo欄位包含一個BLOB。
-- 定義和初始化blob變數
FileStream stream = new FileStream("Logo.jpg", FileMode.Open);
byte[] blob = new byte[stream.Length];
stream.Read(blob, 0, (int) stream.Length);
stream.Close();
SqlConnection conn = new SqlConnection("連線字串");
FileStream stream = new FileStream("Logo.jpg", FileMode.Open);
byte[] blob = new byte[stream.Length];
stream.Read(blob, 0, (int) stream.Length);
stream.Close();
SqlConnection conn = new SqlConnection("連線字串");
try
{
conn.open();
SqlCommand cmd = new SqlCommand("INSERT INTO pub_info(pub_id, logo) VALUES('9937', @logo)", conn);
cmd.Parameters.Add("@logo", blob);
cmd.ExecuteNonQuery();
}
catch(SqlException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
stream.Close();
conn.Close();
}
{
conn.open();
SqlCommand cmd = new SqlCommand("INSERT INTO pub_info(pub_id, logo) VALUES('9937', @logo)", conn);
cmd.Parameters.Add("@logo", blob);
cmd.ExecuteNonQuery();
}
catch(SqlException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
stream.Close();
conn.Close();
}
ExecuteReader()
用法:ExecuteReader 方法存在的目的只有一個:盡可能快地對資料庫進行查詢並得到結果。ExecuteReader 返回一個DataReader物件:如果在SqlCommand物件中調用,則返回SqlDataReader;如果在OleDbCommand物件中調用,返回的是OleDbDataReader。可以調用DataReader的方法和屬性反覆運算處理結果集。它是一個快速枚舉資料庫查詢結果的機制,是唯讀、只進的。對SqlDataReader.Read的每次調用都會從結果集中返回一行。
沒有留言:
張貼留言