當前位置:首頁 » 編程語言 » 所有sql語句都存放在資料庫里
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

所有sql語句都存放在資料庫里

發布時間: 2023-03-08 17:55:56

Ⅰ 如何把oracle sql參數如何用@參數

參數化SQL語句
避免SQL注入的方法有兩種:
一是所有的SQL語句都存放在存儲過程中,這樣不但可以避免SQL注入,還能提高一些性能,並且存儲過程可以由專門的資料庫管理員(DBA)編寫和集中管理,不過這種做法有時候針對相同的幾個表有不同條件的查詢,SQL語句可能不同,這樣就會編寫大量的存儲過程,所以有人提出了第二種方案:參數化SQL語句。例如我們在本篇中創建的表UserInfo中查找所有女性用戶,那麼通常情況下我們的SQL語句可能是這樣:

1

select * from UserInfo where sex=0

在參數化SQL語句中我們將數值以參數化的形式提供,對於上面的查詢,我們用參數化SQL語句表示為:

1

select * from UserInfo where sex=@sex

再對代碼中對這個SQL語句中的參數進行賦值,假如我們要查找UserInfo表中所有年齡大於30歲的男性用戶,這個參數化SQL語句可以這么寫:

1

select * from UserInfo where sex=@sex and age>@age

下面是執行這個查詢並且將查詢結果集以DataTable的方式返回的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13

//實例化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);
//第一種添加查詢參數的例子
command.Parameters.AddWithValue("@sex", true);
//第二種添加查詢參數的例子
SqlParameter parameter = new SqlParameter("@age", SqlDbType.Int);//注意UserInfo表裡age欄位是int類型的
parameter.Value = 30;
command.Parameters.Add(parameter);//添加參數
//實例化DataAdapter
SqlDataAdapter 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」, MySqlDbType.Bit); OracleParameter p=new OracleParameter(「:sex」, OracleType.Byte);
賦值 p.Value=true; p.Value=1; p.Value=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語言在資料庫中的作用它具體能幹些什麼請知道的朋友告訴我一下,謝謝!

從網上摘抄一部分給你,希望對你有用
SQL語言及其優點

首先,讓我們來了解一下使用SQL語言的優點:

● 非過程化語言

● 統一的語言

● 是所有關系資料庫的公共語言

1.非過程化語言

SQL是一個非過程化的語言,因為它一次處理一個記錄,對數據提供自動導航。SQL允許用戶在高層的數據結構上工作,而不對單個記錄進行操作,可操作記錄集,所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。

SQL不要求用戶指定對數據的存放方法, 這種特性使用戶更易集中精力於要得到的結果;所有SQL語句使用查詢優化器,它是RDBMS的一部分,由它決定對指定數據存取的最快速度的手段,查詢優化器知道存在什麼索引,在哪兒使用索引合適,而用戶則從不需要知道表是否有索引、有什麼類型的索引。

2.統一的語言

SQL可用於所有用戶的DB活動模型,包括系統管理員、資料庫管理員、 應用程序員、決策支持系統人員及許多其它類型的終端用戶。基本的SQL 命令只需很少時間就能學會,最高級的命令在幾天內便可掌握。

SQL為許多任務提供了命令,其中包括:

● 查詢數據

● 在表中插入、修改和刪除記錄

● 建立、修改和刪除數據對象

● 控制對數據和數據對象的存取

● 保證資料庫一致性和完整性

以前的資料庫管理系統為上述各類操作提供單獨的語言,而SQL 將全部任務統一在一種語言中。

3.是所有關系資料庫的公共語言

由於所有主要的關系資料庫管理系統都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS(關系資料庫管理系統)轉到另一個,所有用SQL編寫的程序都是可以移植的。

Ⅲ sql 如何保存 查詢語句 到表中 到資料庫中

如果說你要把sql語句存在資料庫中的一張表中,這樣的開銷是很大的,也不提倡。
可以把sql語句保存成.sql結尾的文件保存在硬碟上,要執行的時候直接調用文件就可以。這樣不用給資料庫太大的壓力。

Ⅳ sql server的數據如何導入到mysql資料庫中

1、首先在NavicatforMySQL 管理器中,創建目標資料庫。