sql語句加參數
string sql="insert into 表名 values ("參數1","參數2","參數3")";
sqlParamters[] param=new sqlParamters[]{
new sqlParamters("參數1",名稱.*ng()),
new sqlParamters("參數1",名稱.*ng()),
new sqlParamters("參數1",名稱.*ng())
}
類名.ExecuteCommand(sql,param);
SQL語句中使用參數@
你不用多次執行,把多個Sql語句拼在一個字符串里然后執行就可以了。
------------------------------------------------------------------------------------------------
你的參數如果是針對同一個字段的,那用存儲過程解決不了這個問題。只能拼一個字符串,例如
string[] para;//參數數組
string sql = "SELECT * FROM Table WHERE ";
for(int i=0;i<*;i++)
{
//如果最后一個,不加連接詞
if(i==* -1)
{
sql+= "Column ="+para[i];
}
else
{
sql+="Column ="+para[i]+" or ";
}
}
sql語句中條件表達式含有參數的情況
這個好像要用命令參數的。
string VIDEO_Command = "SELECT Dt,Tm,video_id FROM video WHERE member_id=@MEM_id“;
SqlConnection conn=new SqlConnection (constr);//constr是數據庫連接字符串,要自己寫的,
//和數據庫,表名有關這里我就不說了
SqlCommand cmd=new SqlCommand(VIDEO_Command,conn);
SqlParameter p = new SqlParameter("@MEM_id", MEM_id);
*(p);
//這樣就可以了,@MEM_id是SQL中的命令參數,MEM_id是應用程序的參數
SQL語句的幾個常用函數
1、sql中sum和count的區別 ----sql聚合函數 (1)首先,sum是對一個字段求和,hive中字段的類型一般是string或者是int,如果是int當然沒有問題,如果是string類型但是全部是數字也沒有問題,但是如果string類型中包含一個字母,sum的結果將會是0 例如如下的表:user_id string shop_id string1234 hello1234 1234 那么sum(user_id)的結果就是2468,sum(shop_id)的結果就是0.如果沒有符合的條件的記錄,sum的返回值就是Null,如:sum(case when user_id但是有些時候我們希望sum的結果如果沒有符合的記錄就返回0,可以用coalesce(shop_id, 0)解決這個問題。
(2)count是對數據記錄的條數進行統計,有一條符合的記錄就是1,沒有就是0.2、 case when then end用法示例: -----sql流程控制函數 case value when compare-value then result when compare-value then result …… else result end 例如:select case when 1>0 then 'yes' else 'no' end;+----------------------------------------+ | case when 1>0 then 'yes' else 'no' end |+----------------------------------------+ | yes |+----------------------------------------+3、row_number( ) over用法: -------sql分析函數 row_number() OVER ( PARTITION BY COL1 ORDER BY COL2) 表示根據COL1分組,在分組內部根據 COL2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的). 4、if()函數 ----------sql流程控制函數 (1) if(expr1, expr2, expr3) 如果expr1返回真, 則該表達式返回expr2,否則返回expr3 e.g. mysql> select if(strcmp('test','test'),'no','yes');+--------------------------------------+ | if(strcmp('test','test1'),'no','yes') |+--------------------------------------+ | yes |+--------------------------------------+ 說明:strcmp(expr1, expr2)這個函數在expr1小于expr2時,返回-1,相等時返回0,其余情況返回1.在上面的例子中,strcmp返回-1,所以上例輸出返回yes (2) ifnull(expr1, expr2) 該函數在expr1為NULL時,返回expr2,否則,返回expr1. (3) nullif(expr1, expr2) 如果expr1=expr2,則返回NULL,否則,返回expr15、max()函數 和min()函數 ------sql聚合函數 語法:MIN(e1)、MAX(e1) 參數:e1為一個字符型、日期型或數值類型的表達式。若e1為字符型,則根據ASCII碼來判斷最大值與最小值。
返回:根據e1參數的類型,返回對應類型的數據。作用:MIN(e1)返回e1表達式指定的列中最小值;MAX(e1)返回e1表達式指定的列中最大值;說明:max函數可以使用于numeric、char、varchar、money、smallmoney、或datetime列,但不能用于bit列。
不允許使用聚合函數和子查詢。e.g.查詢TEACHER表中教師的最大年齡。
實例代碼:SELECT MAX (AGE) AS MAXAGE FROM TEACHER 運行結果如下圖所示:圖1TEACHER表中教師的最大年齡 然而,在實際應用中得到這個結果并不是特別有用,因為經常想要獲得的信息是具有最大年齡的教師的教工號、姓名、性別等信息。然而SQL不支持如下的SELECT語句: SELECT TNAME, DNAME, TSEX, MAX (AGE) FROM TEACHER 因為聚合函數處理的是數據組,在本例中,MAX函數將整個TEACHER表看成一組,而TNAME、DNAME和TSEX的數據都沒有進行任何分組,因此SELECT語句沒有邏輯意義。
同樣的道理,下面的代碼也是無效的:SELECT TNAME, DNAME, TSEX,SAL ,AGE FROM TEACHER WHERE AGE=MAX (AGE) 解決這個問題的方法,就是在WHERE子句中使用子查詢來返回最大值,然后再基于這個返回的最大值,查詢相關信息。下例在WHERE子句中使用子查詢返回最大值:查詢TEACHER表中年紀最大的教師的教工號、姓名、性別等信息。
實例代碼:SELECT TNAME, DNAME, TSEX, SAL, AGE FROM TEACHER WHERE AGE=(SELECT MAX (AGE) FROM TEACHER) 運行結果如下圖所示:。
請教sql語句中一個參數的寫法
看看我修改的,貌似樓主寫的case when 語句有毛病~~~~
ALTER proc [dbo].[spGetBDass]
(@rroomid varchar(200)
)
as
declare @rroomid int
set @rroomid=1
Declare @sql varchar(8000)
Set @sql = 'Select bdid as 標單編號'
Select @sql = @sql + ',sum(case Attru when '''+Attru+''' then Val else 0 end) ['+Attru+']'
from (select distinct Attru from NegoAttru where bdid in(Select id from NegoResu where RoomId=@rroomid)) as NegoAttru
Select @sql = @sql+' from NegoAttru where bdid in(Select id from NegoResu where RoomId='''+@rroomid+''') group by bdid '
Exec (@sql)
如何把oracle sql參數如何用@參數
參數化SQL語句避免SQL注入的方法有兩種:一是所有的SQL語句都存放在存儲過程中,這樣不但可以避免SQL注入,還能提高一些性能,并且存儲過程可以由專門的數據庫管理員(DBA)編寫和集中管理,不過這種做法有時候針對相同的幾個表有不同條件的查詢,SQL語句可能不同,這樣就會編寫大量的存儲過程,所以有人提出了第二種方案:參數化SQL語句。
例如我們在本篇中創建的表UserInfo中查找所有女性用戶,那么通常情況下我們的SQL語句可能是這樣:1select * from UserInfo where sex=0在參數化SQL語句中我們將數值以參數化的形式提供,對于上面的查詢,我們用參數化SQL語句表示為: 1select * from UserInfo where sex=@sex再對代碼中對這個SQL語句中的參數進行賦值,假如我們要查找UserInfo表中所有年齡大于30歲的男性用戶,這個參數化SQL語句可以這么寫:1select * from UserInfo where sex=@sex and age>@age下面是執行這個查詢并且將查詢結果集以DataTable的方式返回的代碼: 12345678910111213//實例化Connection對象SqlConnection connection = new SqlConnection("server=localhost;database=pubs;uid=sa;pwd=''");//實例化Command對象SqlCommand command = new SqlCommand("select * from UserInfo where sex=@sex and age>@age", connection);//第一種添加查詢參數的例子*hValue("@sex", true);//第二種添加查詢參數的例子SqlParameter parameter = new SqlParameter("@age", *);//注意UserInfo表里age字段是int類型的* = 30;*(parameter);//添加參數//實例化DataAdapterSqlDataAdapter adapter = new SqlDataAdapter(command);DataTable data = new DataTable();上面的代碼是訪問SQL Server數據庫的代碼。如果本文中提到的數據分別在Access、MySQL、Oracle數據庫,那么對應的參數化SQL語句及參數分別如下:數據庫 Access MySQL Oracle SQL語句 select * from UserInfo where sex=? and age>? select * from UserInfo where sex=?sex and age>?age select * from UserInfo where sex=:sex and age>:age 參數 OleDbParameter MySqlParameter OracleParameter 實例化參數 OleDbParameter p=new OleDbParameter(“?”, OleDbType. Boolean); MySqlParameter p=new MySqlParameter(“?sex”, *); OracleParameter p=new OracleParameter(“:sex”, *); 賦值 *=true; *=1; *=1; 通過上面的實例代碼我們可以看出盡管SQL語句大體相似,但是在不同數據庫的特點,可能參數化SQL語句不同,例如在Access中參數化SQL語句是在參數直接以“?”作為參數名,在SQL Server中是參數有“@”前綴,在MySQL中是參數有“?”前綴,在Oracle中參數以“:”為前綴。
注意:因為在Access中參數名都是“?”,所以給參數賦值一定要按照列順序賦值,否則就有可能執行出錯。Command對象傳參效率測試在.net平臺,普通的insert語句有兩種寫法,不帶參數insert into test(c1,c2) values(var1,var2)和帶參數insert into test(c1,c2) values(:c1,:c2),它們的執行效率如何呢?做了個試驗,代碼如下:(數據庫是oracle)+ View Code執行結果:10000記錄:不傳參數?5:46:19 15:46:34 15秒傳參數: ?5:50:51 15:51:01 10秒50000記錄:不傳參數 16:09:03 16:10:24 81秒傳參數::16:15:43 16:16:36 53秒這只是2個參數的情況,如果參數很多會不會影響更大呢?10000記錄,7個參數:不傳參數:17:11:01 17:11:18 17秒傳參數:17:13:46 17:13:59 13秒50000記錄:7個參數:不傳參數:17:19:02 17:20:25 1分23秒傳參數:17:15:09 17:16:10 1分1秒需要相差不大,但是向command對象傳遞參數既可以避免sql注入問題,也可以提高性能;。
SQL 語句 參數問題
你說的基本上正確,舉個例子:
string sql = *("insert account values(@name,@pwd,@time)");
SqlCommand cmd=new SqlCommand();
*tion=//給定的SqlConnection
*dText=sql;
*(new SqlParameters("@name","abc"));
*(new SqlParameters("@pwd","123456"));
*(new SqlParameters("@time","2011-6-28"));
//名字是要和你的SQL語句中的變量名一致
//這種@的寫法不是只能用于存儲過程的~
供參考~