C# 執行sql 的方法

  • 21532
  • 0
  • C#
  • 2018-05-25

當寫了sqlCommand後,到底該用那個來執行這個command ?? 

很久沒有自己全部自己寫一整個程式,包含sqlCommand以及如何綁定到gridview ,花了一點時間查了一堆網頁,總覺得不紀錄起來我的腦容量大概明天就忘了。


Asp.net 主要執行SQL 有三種方法,ExecuteNonQuery() 、 ExecuteScalar()、ExecuteReader()

ExecuteNonQuery( ):

主要用來執行INSERT、UPDATE、DELETE和其他沒有返回值得SQL命令

ExecuteScalar( ):

返回結果集為:第一列的第一行。

經常用來執行SQL的COUNT、AVG、MIN、MAX 和 SUM 函數。

PS: ExecuteScalar 返回為Object類型,必須強置轉型。

EX:

object objResult = objCMD.ExecuteScalar()
假設想要轉型成string 
string result = cmd.ExecuteScalar().ToString();

ExecuteReader( ):

快速的對資料庫進行查詢並得到結果。

返回為DataReader物件,如果在SqlCommand物件中調用,則返回SqlDataReader。

對SqlDataReader.Read的每次調用都會從結果集中返回一行。


Q&A:

Q1:若我的資料不只有一行,是好多行要怎麼利用 ExecuteReader() 來全部讀出呢??

A1:因為 ExecuteReader ( ) 它是集中返回一行,所以我們必須讓她一直重複讀取的動作,直到無不到東西為止

我們透過SqlDataReader去接executeReader() 所返回的物件,並且透過sqlDataReader .Read() 讓它一直讀

但怕讀到的為空白行,所以特別增加一個條件確定sqlDataReader  不為空白行(DBnull.Value) 

SqlConnection conn = openMSsqlConnection(); //連線
SqlCommand cmd = new SqlCommand(SQLString, conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
   //防止為空白行
  if (!dr[0].Equals(DBNull.Value))
  {
     //do something               
  }
}
           

2018/05/25更新

果然這樣寫我還是不記得怎麼寫,在寫詳細點。這樣應該更清楚啦~~

string SQLString = "SELECT USERSNAME,USERID FROM USERS WHERE USERID LIKE '06%'";

SqlConnection conn = openMSsqlConnection(); //連線
SqlCommand cmd = new SqlCommand(SQLString, conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
   //防止為空白行
  if (!dr[0].Equals(DBNull.Value))
  {
                  
      string USERSNAME = dr["USERSNAME"].ToString();
      string USERID = dr["USERID"].ToString();
      //do something  
  }
}
        

參考資料

1.ASP.NET C# 3個執行SQL的方法說明