以下是學(xué)習(xí)中小結(jié),若有幸被大俠看到,文章中的錯(cuò)誤還望不吝賜教。。。。
創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),小程序開發(fā),十余年建站對成都玻璃隔斷等多個(gè)行業(yè),擁有豐富的網(wǎng)站維護(hù)經(jīng)驗(yàn)。
C#中使用 SQL語句
首先注意兩點(diǎn):
第一、語句的構(gòu)造是否正確, 第二、與程序交互時(shí),使用到的一些變量
1. 在sql語句中。 如果某個(gè)字段的數(shù)據(jù)類型不為數(shù)字形式,那么在sql語句中,如條件判斷...都需要用到(兩個(gè)單引號)將數(shù)據(jù) 括起來; 例如:
表[student] id(自動(dòng)編號) uID(學(xué)號) uName(學(xué)生姓名)
-->查詢(名字是李世民的學(xué)生信息) :
select uID, uName FROM student WHERE uName = '李世民'
2.在C#中,string 類型的變量需要使用(兩個(gè)雙引號) “” 括起來
結(jié)合以上兩點(diǎn)、在c#中拼湊SQL查詢語句你就可以這樣使用
string str_Sql = " SELECT uID, uName FROM student WHERE uName ='李世民'";
---------------------------------------------------------------------------
1.首先把你的SQL語句構(gòu)造好。 不要先加變量
string str_Sql = " SELECT uID, uName FROM student WHERE uName = ' "+ +" ' " ;
2.在需要使用變量的位置,用(兩個(gè)雙引號)將這句話分開。
現(xiàn)在它只不過是字符串而已;
在這其中,你可以看出來,where后加入的兩個(gè)雙引號,一個(gè)是用來結(jié)束,與最開頭的雙引號對應(yīng)。
---->在c#語句中。使用兩個(gè)雙引號 將字符串括起來。注意一定要成對
---->連接兩個(gè)字符串所有的操作符是 + 號
---------------------------------------------------------
string str_Sql =" SELECT uID, uName FROM student WHERE uName = ' "+變量 +" ' " ;
總結(jié):雙引號" 和加號 + 是C#中的定界符.
兩個(gè)雙引號之中的字符都被程序認(rèn)定為字符串不參與任何計(jì)算或是程序的執(zhí)行。僅僅是字符串。而加號是連接兩個(gè)字符串的定界符。
比如 string str_Print = "我是" + "天下第一";
變量 str_Print的值為 我是天下第一
單引號'是SQL語句中對數(shù)據(jù)類型為字符類型的字段使用的nvarchar ntext nchar 。。。
----------------------------------------------------------------------------------------
//some 查詢語句
string sql= string.Format("select * from UserInfo where Uname='{0}'and UPwd='{1}'and UState='{2}'", this.txtName.Text.Trim(),this.txtPwd.Text.Trim(),num);
------------------
//定義sql語句
string sql="select * from BookInfo where BookType='"+booktype+"' "+cbo1+" BookName like '%" +bookname+"%' "+cbo2+" BookContent like '%"+bookcontent+"%'";
---------------------------------
string sql=string.Format(insert into BookInfo values('{0}' , '{1}' ,'{2}' ,'{3}' ,'{4}' ,'{5}' ,'{6}' ", booktype,bookauthor,bookpic,bookprice,bookcontent,bookissue );
-------------------------------------------------------
(1)拼接產(chǎn)生SQL語句:
以下是代碼片段: string sql = "insert into czyb(yhm,mm,qx) values('" + txtName.Text + "','" + txtPassword.Text + "','" + cmbPriority.Text + "')"; OleDbCommand cmd = new OleDbCommand(sql, conn); |
這種方法寫法比較復(fù)雜,且安全性低,容易遭受SQL注入***。
(2)用string.Format方法:
以下是代碼片段: string sql = string.Format("insert into czyb(yhm,mm,qx) values('{0}','{1}','{2}')", txtName.Text, txtPassword.Text, cmbPriority.Text); |
(3)用參數(shù)化SQL語句:
以下是代碼片段: string sql="insert into czyb(yhm,mm,qx) values (@yhm,@mm,@qx)"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = sql; cmd.Parameters.AddWithValue("@yhm", txtName.Text); cmd.Parameters.AddWithValue("@mm", txtPassword.Text); cmd.Parameters.AddWithValue("@qx", cmbPriority.Text); cmd.Connection = conn; conn.Open(); cmd.ExecuteNonQuery(); |
代碼結(jié)構(gòu)清楚,對于不支持存儲過程的數(shù)據(jù)庫(如Access),推薦采用本方法。
(4)如果數(shù)據(jù)庫支持存儲過程(如SQL Server),可以調(diào)用存儲過程執(zhí)行SQL:
以下是代碼片段: SqlConnection conn = new SqlConnection(txtConn); SqlCommand cmd = new SqlCommand("SearchContact", conn); //存儲過程名稱為SearchContact cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@name", SqlDbType.VarChar, 50); //傳入?yún)?shù) cmd.Parameters["@name"].Value = txtName.Text.Trim(); |
由于存儲過程是數(shù)據(jù)庫預(yù)編譯的,執(zhí)行效率高,推薦采用。