本博文簡單介紹一下SQL Server中常用的幾類查詢及相關使用的方法。
一、ExecuteScalar方法擷取單一值
ExecuteScalar方法是SqlCommand類的方法之一,執行查詢,並返回查詢所返回的結果集中的第一行第一列。
class Program { static void Main(string[] args) { string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456"; using (SqlConnection con = new SqlConnection(strCon))//使用串連池,使用完後自動關閉串連 { using (SqlCommand cmd = con.CreateCommand()) { string sql = "select count(*) from User_Info";//定義sql語句,查詢整個表的行數 cmd.CommandText = sql; con.Open(); int count = Int32.Parse(cmd.ExecuteScalar().ToString()); //返回整個結果集的首行首列,是一個Object類型 Console.WriteLine(count); cmd.CommandText = "select * from User_Info";//定義sql語句 string s = cmd.ExecuteScalar().ToString(); //返回整個User_Info表的第一行並賦給字串s Console.WriteLine(s);//將結果列印輸出 Console.ReadLine(); } } }
執行結果如:
二、ExecuteNonQuery方法執行增刪改操作
ExecuteNonQuery方法也是SqlCommand的方法之一,對串連執行T-SQL語句並返回受影響的行數。舉例:
static void Main(string[] args) { string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456"; using (SqlConnection con = new SqlConnection(strCon))//使用串連池,使用完後自動關閉串連 { using (SqlCommand cmd = con.CreateCommand()) { ///資料操作語言,增刪改查 string ins = "insert into User_Info (userID) values ('123')"; con.Open();//串連資料庫 cmd.CommandText = ins; int res = cmd.ExecuteNonQuery(); //執行SQL語句返回受影響的行數 if (res > 0) { Console.WriteLine("成功插入" + res + "條記錄"); } else { Console.WriteLine("插入失敗"); } Console.ReadLine(); } } }
執行結果如:
三、BeginExecuteReader()和EndExecuteReader()非同步查詢大結果集
所謂非同步查詢大結果集,就是如果資料量非常大,那麼在開始執行查詢和結束查詢這一過程中可能會需要耗費一段時間,在這段時間我們也可以讓我們的程式去幹一些別的事,就有了上述兩種方法。舉例:
static void Main(string[] args) { string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456"; using (SqlConnection con = new SqlConnection(strCon))//使用串連池,使用完後自動關閉串連 { using (SqlCommand cmd = con.CreateCommand()) { //非同步查詢大結果集 cmd.CommandText = "waitfor delay '00:00:05' ;select * from User_Info"; //延遲5秒串連資料庫 con.Open(); IAsyncResult iar=cmd.BeginExecuteReader(); //BeignExecuteReader方法判斷非同步查詢是否完成 //此處可以寫入其他資料庫操作 SqlDataReader sdr= cmd.EndExecuteReader(iar); //EndExecuteReader方法結束串連,並把資料存放區到資料集中 while (sdr.Read()) { Console.WriteLine(sdr[0]+" "+sdr[1]); } Console.ReadLine(); } } }
由於延遲了5秒中,所以輸出結果在5秒以後才出現如下:
四、執行批量查詢操作
一般我們在用SQL語句查詢時只是查詢到一條記錄,那麼如何在一個表中同時插入或者更新多條記錄呢,這就用到了多天T-SQL語句。舉例:
class Program { static void Main(string[] args) { string strCon = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456"; using (SqlConnection con = new SqlConnection(strCon))//使用串連池,使用完後自動關閉串連 { using (SqlCommand cmd = con.CreateCommand()) { //執行大量操作查詢,同時執行多條SQL語句 string sql = "update User_Info set UserName ='888' where userID ='2'" + "update User_Info set UserName ='999' where userID ='3'"; //將兩條T-SQL語句串連 con.Open();//開啟資料庫 cmd.CommandText = sql; int res = cmd.ExecuteNonQuery(); //執行SQL語句返回受影響的行數 if (res > 0) { Console.WriteLine("成功插入" + res + "條記錄"); } else { Console.WriteLine("插入失敗"); } Console.ReadLine(); } } }
執行結果如下:
五、參數化查詢
我們在剛開始學習在應用程式中編寫SQL語句時,一般使用拼接字串,單引號、雙引號什麼都有,編寫起來很不方便,而且容易被SQL注入破壞敏感性資料,既不安全,由此我們引入了參數化查詢,顧名思義,就是將要查詢的內容用參數代替。看下面的例子:
<span style="font-family:Times New Roman;">static void Main(string[] args) { string conStr = "Data Source=192.168.24.193;Initial Catalog=charge_sys;User ID=sa;Password=123456"; using (SqlConnection con = new SqlConnection(conStr)) { using (SqlCommand cmd = con.CreateCommand()) { cmd.CommandText = "select * from User_Info where userID=@userid"; //第一種方法 //SqlParameter param = new SqlParameter(); //param.ParameterName = "username"; //param.SqlDbType = SqlDbType.Char; //param.Size = 10; //param.Value = "admin"; //con.Open(); //第二種方法,直接使用AddWithValue方法直接給參數賦值 cmd.Parameters.AddWithValue("@userid", '1'); con.Open(); SqlDataReader sdr = cmd.ExecuteReader(); while(sdr.Read()) { Console.WriteLine(sdr[0]+" "+sdr[1]); } Console.ReadLine(); } } }</span>
六、MuHipleActiveResultSet方法執行多活動結果集
一般一個Connection對象只支援一個活動動作,如果我們需要添加另外一個或其他的或,在SQL串連語句後加上MuHipleActiveResultSet=True即可。這裡就不在示範了,希望本博文能給您帶來一些協助。