黑马程序员--ADO.Net中的知识点和难点
------- Windows Phone 7手機開發、.Net培訓、期待與您交流! -------
?1、 ADO.Net基礎
程序要和數據庫交互要通過ADO.Net進行,通過ADO.Net就能在程序中執行SQL了。
直接在項目中內嵌mdf文件的方式使用SQLServer數據庫(基于服務的數據庫)。mdf文件隨著項目走,用起來方便,和在數據庫服務器上創建數據沒有什么區別,運行的時候會自動附加(Attach)。
雙擊mdf文件會在“服務器資源管理器”中打開,管理方式和在Mangement Studio沒有什么本質區別,要拷貝mdf文件需要關閉所有指向mdf文件的連接。
?正式生產運行時附加到SQLServer上,修改連接字符串即可,除此之外沒有什么區別,它在“數據庫”節點上點右鍵“附加”;在數據庫節點上找任務下的分離可以得到可以拷來拷去mdf文件。
用的時候要在控制臺、WinForm項目中在Main函數最開始的位置加入備注中的代碼。ASP.Net不需要。備注中的代碼如下:
?string dataDir=AppDomain.CurrentDomain.BaseDirectory;
? if(dataDir.EndsWith(@"\bin\Debug\")||dataDir.EndsWith(@"\bin\Release\"))
??{
????? dataDir=System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
?????? AppDomain.CurrentDomain.SetData("DataDirectory",dataDir);
?? }
2、連接SQLServer
連接字符串:程序通過連接字符串指定要連哪臺服務器上的、哪個實例的哪個數據、用什么用戶名密碼等。
項目內嵌mdf文件形式的連接字符串"Data Source=.\SQLEXERPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User? Instance=True".? ".\SQLEXERPRESS"表示本機上的SQLEXERPRESS實例",如果數據庫實例名不是SQLEXERPRESS,則需要修改。“Database1.mdf”為mdf的文件名。
ADO.Net中通過sqlConnection類創建到SQLServer的連接,sqlConnection代表一個數據庫連接,ADO.Net中的連接等資源都實現了IDisposable接口,可以使用using進行資源管理執行備注中的代碼如果成功了就ok。
3、執行簡單的Insert語句
sqlCommand表示向服務器提交的一個命令(SQL語句等)
CommandText屬性為要執行的SQL語句,ExecuteNonQuery方法執行一個非查詢語句(Update、Insert、Delete等)
?using(SqlCommand? cmd=conn.CreateCommand())
{
?? cmd.CommandText="insert? into T_Users(UserName,Password) values('admin','888888');
?? cmd.ExecuteNonQuery();
}
ExecuteNonQuery返回值是執行的影響行數
易錯點:string username='test';
??????????? .......
??????????? cmd.CommandText="insert into T_Users(UserName,Password) values(username,'888888');
4、執行查詢
?執行有多行結果集的用ExeccuteReader
SqlDataReader? reader=cmd.ExecuteReader();
.................
while(reader.Read())
{
?? Console.WriteLine(reader.GetString(1));
}
reader的GetString、GetInt32等方法只接受整數參數, 也就是序號,用GetOrdinal方法根據列名動態得到序號。
5、ExecuteScalar
sqlCommand的ExecuteScalar方法用于執行查詢,并返回查詢所返回的結果集中在第一行的第一列,因為不能確定返回值的類型,所以返回值是object類型。
cmd.CommandText="select count(*) from T_Users";? int i=Convert.ToInt32(cmd.ExecuteScalar());
cmd.CommandText="select getdate()";DateTime dt=Convert.ToDateTime(cmd.ExecuteScalar());
得到自動增長字段的主鍵值,在values關鍵詞前加上output inserted.id,其中id為主鍵字段名。執行結果就是插入的主鍵值,用ExecuteScalar執行最方便。
cmd.CommandText="insert into T_Users(UserName,Password)output inserted.id values('admin','888888');
int i=Convert.ToInt32(cmd.ExecuteScalar());
6、SQL注入漏洞攻擊
構造惡意的Password:'or'1'='1
if(reader.Read())
{
?? Console.WriteLine("登錄成功");
}
else
{
?? Console.WriteLine("登錄失敗");
}
防范注入漏洞攻擊的方法:不使用SQL語句拼接,通過參數賦值
總結:后面的練習題基本就是用的是前面的知識點,重點掌握前面的知識點。
通過今天的視頻學習,感覺后面的習題有點小難度,要解決它,多看多練。
------- Windows Phone 7手機開發、.Net培訓、期待與您交流! -------
轉載于:https://www.cnblogs.com/junhan/archive/2012/11/22/2782495.html
總結
以上是生活随笔為你收集整理的黑马程序员--ADO.Net中的知识点和难点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM平台增加性能测试/稳定性测试部分【
- 下一篇: 【ASP.NET Web API教程】2