? ? ? 本博文簡介一下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語句時,一般使用拼接字符串,單引號、雙引號什么都有,編寫起來非常不方便,并且easy被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就可以。這里就不在演示了,希望本博文能給您帶來一些幫助。
? ? ??
? ? ??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
