『壹』 linq to sql 的執行效率問題
linq開發效率高,寫出的代碼看著舒服,而且在編譯時就可以查出錯誤,如果有語法錯誤編譯是不會通過的,這樣後期維護起來就方便多了。你可以想想,如果是ADO.NET,不用存儲過程話,把sql語句全都寫在代碼里,在編譯時你是看不出錯誤的,只有運行起來以後慢慢調試才知道sql語句有沒有寫錯,或者先把sql語句放到資料庫里跑一遍再寫進程序里,但開發效率都很低。時間就是成本啊,現在的開發越來越講究開發效率和可維護性了,歷史證明為此犧牲執行效率是值得的,畢竟硬體也一直再發展。否則都用匯編寫代碼執行效率肯定最高的。
『貳』 LInQ查詢問題,急!!!!!!
linq做這種基本很難,除非你引入動態linq核心庫,那個是開源的,但是那個本質就是執行sql了。
另一種就是構建linq表達式樹,這個有點得不償失,性能也不怎麼樣,所以說linq查詢空間變化的結構就是雞肋了。
------------------------------------------------------------------
你變成如下方式吧!可以用sql代替,linq執行sql即可!
如下是我動態構建全表查詢的方式,你把
INFORMATION_SCHEMA.COLUMNS變成你的參數配置表,
from T_CRD--》變成你的表。
---------------------------------------------------------------------
DECLARE @tsql nvarchar(1000)
DECLARE @colName varchar(500)
set @colName=''
SELECT @colName=@colName+COLUMN_NAME+',' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='T_CRD'
set @tsql='select ' + subString(@colName,1,len(@colName)-1) + ' from T_CRD'
exec sp_executeSQL @tsql
----------------------------------------------------------------------------------------
看你能問這個問題,估計你有點功底,加入我團隊吧!資料庫聚賢庄
水平不到位不會出現拉攏廣告,O(∩_∩)O哈哈~
『叄』 在TP框架中,使用原生SQL有什麼弊端
TP的查詢語法是支持跨資料庫的,如果原生的話,可能就不能跨資料庫支持了,另外一個就是在安全過濾這塊需要自己把關了,優勢是性能上省去了SQL組裝的開銷。
『肆』 弱弱的問一個Linq和資料庫sql性能的問題
對的。一個是從資料庫拿出所有數據再篩選,一個是直接在資料庫查找符合條件的數據,效率當然不一樣。LINQ
TO
SQL的確存在性能問題,但是LINQ
TO
XML等其他功能還是很好用的。
『伍』 LINQ比一般的SQL語句效率更高嗎
Linq是一個范圍比較大的概念,它其中不單單只有linq to sql,還有相應的linq to xml等等。所以拿linq 與SQL語句相比,沒有可比性的。
但如果拿linq to sql相比的話,與SQL還是有很大的可比性的。一般情況下,你必須要明白你所指的效率是哪一方面?是資料庫執行效率?還是整體成品軟體運行效率?還是開發效率?
開發效率上linq to sql顯然要比SQL的效率要高很多,我們使用linq to sql 可以很容易實現編程,其中的代碼量也大大減少。所以如果從開發方面linq to sql的效率是毫無疑問要高於直接的SQL與資料庫連接。
如果從編方譯考慮,這個一般情況下,linq to sql是引入的新的技術,效率肯定是不如SQL的。好在這個編譯的部分不需要開發人員或是任何用戶的參與,所以即是效率差一點,對軟體來說沒有任何的影響。
最後一部分你可以比較感興趣,誰對資料庫的連接更快,執行效率更好?答案是linq to sql而不是直接的語句。一般我們使用直接的語句要求的是即是的執行,但事實上很多時間我們根本不需要那麼多,linq to sql其實說明了就是會自動生成與表結構同樣的一些對象。而這些對象在聯系資料庫時也是直接編譯好的語句,直接聯系時,兩者效率是相同的。
但是,如果我們對數據進行處理時,你就會發現,linq to sql的效率為什麼會更高了!因為他在讀取時不但會讀取當前表來填充生成的對象,同時還是延時讀其相關表,為你使用有關系的表提供了極大的方便。那麼你的相關表的讀取效率要快了!
但不管怎麼樣,他們都是在站立在了ado.net的基礎之上的,只不過有些自動生成了,根本不需要你再去做而已。唯一效果比較差的是,linq to sql讀出的數據在系統中被轉化了,同時它效率雖然變差一些,但是卻帶來了另一個好處,就是我們常說的SQL注入問題不再出現,你所輸入的任何東西都會變成了字元串了。
其實ADO.net的方案中我們使用了datareader方案的效高是比較高的,但是對於更新卻是極差的。而使用數據適配器的方案效率較底一些,更對於數據的更新是相當好的,而對於linq to sql其實它是使用數據緩存方案,也就是說linq to sql其實將資料庫中的數據緩存到了對象中,如果對象發生了更改,有必須過行返饋時,它是可以進行反饋的,而是這種反饋是可控制的,事務性的。從各方面給我們帶來了好處。
我們可以在更新了很多內容之後再去提交更改,那麼這種效率論從理解上還是效率上都優化你的原來的語句的!所以linq to sql並非在性能上的降低,而是一種提高。
嚴格說來,linq to sql並不是節省了代碼,相反它增加了很多代碼,便幸運的是,這些代碼都是由linq to sql框架自動生成的。若是換作人工,容易出錯的。但在使用時,由於框架完成了大部分的代碼,我們再使用linq to sql加上lambad表達式或查詢表達式,我們的代碼就變得極少且極簡潔了!而如果使用lambad表達式或查詢表達式時,它的效率顯然不如直接SQL來的直接。讀取效率會變得差一些的!
這是因為lambda表達式或查詢表達式是一個動態編譯的效果,而不是直接編譯好的,他要對語句進行編譯與優化以何證效率,但性能上因為多了一重處理,效率沒有SQL來的直接。但一般情況下,使用linq to sql配合查詢表達式或lambad表達式時,效率雖然稍差,但是帶來的卻是代碼的簡潔與易理解性,如果不配合查詢表達式與lambad表達式,linq to sql的優劣還不利用體現。所以關非linq to sql的效率差,而是我們使用了查詢表達式的動態編譯導致了效率較差。就linq to sql本身上來就,效率並不差的!
『陸』 LINQ TO SQL 有什麼優缺點啊
首先,在了解 LINQ To SQL 有什麼優點之前,我們有必要首先了解下,微軟為什麼弄了這么個東西。 搞出這個東西來有什麼目的:——當然是為了 滿足不知道怎麼操作數據的程序員開發設計的,並不是每個程序員 都會直接操作資料庫,LinQ 可以讓他們以一種面向數據對象的方式來思考,及持久化他們的數據!
好處: 容易學習,書寫簡單。 在開發 中小型 項目 的時候推薦使用!因為可以節省時間!
它可以很方便的調用 存儲過程、SQL函數
缺點:由於直接封裝了所有的數據持久操作。導致批量持久數據會產生效率問題
尤其體現在批量跟新數據,它會在內存中保持大量的數據模型。
總結:中小型 項目 就放心用吧! 不過從技術 儲備的角度來說,建議 看看entity framework
『柒』 如何用LINQ防止SQL注入式攻擊
SQL注入式攻擊是在登陸時要考慮到的問題,在asp.net中,常常使用參數傳遞來防止SQL注入式攻擊。
例如開發一個管理員登錄功能,登錄名為admin。正確的SQL語句應該是
Select count(*) from LoginInfo where Name='admin'
如果在登錄名文本框中輸入"admin=1",單擊登錄,此時SQL語句會被轉換成下面代碼
Select count(*) from LoginInfo where Name='admin'='1'
LINQ to SQL 在用於數據存取時,清除了SQL注入式攻擊。
『捌』 LinQ 可以取代SQL語句嗎
個人認為目前還不可以了因為LINGQ的局限性很大,復雜一點的SQL語句難以用LINGQ編寫或編寫麻煩。
『玖』 SQL注入的特點與危害分別有哪些
1、廣泛性:任何一個基於SQL語言的資料庫都可能被攻擊,很多開發人員在編寫Web應用程序時未對從輸入參數、Web表單、Cookie等接收到的值進行規范性驗證和檢測,通常會出現SQL注入漏洞。
2、隱蔽性:SQL注入語句一般都嵌入在普通的HTPP請求中,很難與正常語句區分開,所以當前許多防火牆都無法識別予以警告,而且SQL注入變種極多,攻擊者可以調整攻擊的參數,所以使用傳統的方法防禦SQL注入效果非常不理想。
3、危害大:攻擊者可以通過SQL注入獲取到伺服器的庫名、表名、欄位名,從而獲取到整個伺服器中的數據,對網站用戶的數據安全有極大的威脅。攻擊者也可以通過獲取到的數據,得到後台管理員的密碼,然後對網頁頁面進行惡意篡改。這樣不僅對資料庫信息安全造成嚴重威脅,對整個資料庫系統安全也有很大的影響。
4、操作方便:互聯網上有很多SQL注入工具,簡單易學、攻擊過程簡單,不需要專業的知識也可以自如運用。
『拾』 .net4.0中怎麼使用LINQ與SQL結合。
使用linq的這個方法 ExecuteCommand()
//
// 摘要:
// 直接對資料庫執行 SQL 命令。
//
// 參數:
// command:
// 要執行的 SQL 命令。
//
// parameters:
// 要傳遞給命令的參數數組。注意下面的行為:如果數組中的對象的數目小於命令字元串中已標識的最大數,
則會引發異常。如果數組包含未在命令字元串中引用的對象,則不會引發異常。如果任一參數為
// null,則該參數會轉換為 DBNull.Value。
//
// 返回結果:
// 一個 int,表示所執行命令修改的行數。
public int ExecuteCommand(string command, params object[] parameters)