Winform基礎程式和ADO.NET基礎

來源:互聯網
上載者:User

  1.第一個WinForm程式

(1) WinForm: Windows Form,  .NET中用來開發Windows視窗應用程式的技術。

(2) 控制項:視窗上很多元素都是相似的,因此將這些元素抽象成一些類,這些類就叫做控制項。按鈕(Button),文字框(TextBox),標籤(Label),選項按鈕(RadioButton),複選框(CheckBox)。

(3) 複習TryParse

int.TryParse:將數位字串表示形式轉換為它的等效32位有符號整數,一個指示操作是否成功的傳回值。

文法結構:public static bool Tryparse(string s,out int result);

註:TryParse方法類似與parse方法,不同之處在於TryParse方法在轉換失敗事不引發異常。

例如:加法計算機:

string str1=TextBox1.Text;     string str2=TextBox2.text;

int i1,i2;

if(!int.TryParse(str1,out i1))

{

MessageBox.Show(“第一個數不是合法的整數!”);

Return;
}

              If(!int.TryParse(str2,out i2))

              {

                     MessageBox.Show(“第二個數不是合法的整數!”);

                     Return;

              }

              int i3=i1+i2;   TextBox3.Text=Convert.ToString(i3);

(4) 文字框的幾種模式:Multiline(多行),PassWordChar(密碼)

(5) 控制項名要有含義,控制項名首碼的“潛規則”,按鈕Button:btn;文字框TextBox:txt;

複選框CheckBox:cb。控制項的名字要有意義!

(6) 局部變數每次運行完畢變數的值都會被銷毀,下次在運行,會重新初始化,而類欄位只要是一個對象,那麼只要對象不銷毀,就會一直保持對象的欄位值。

例如:文字框實現查詢出某人的成績是裡面最高的?

ADO.NET基礎

  1. ADO.NET基礎

(1) 程式要和資料庫進行互動要通過ADO.NET進行,通過ADO.NET就能在程式中執行SQL語句,ADO.NET提供了對各種不同年資料庫的統一操作介面。

(2) 在Winform中用到的一段代碼(楊中科老師譽為神奇的代碼)。嘿嘿

    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);

    }

原理分析:連接字串中的DataDirectory的值就是通過AppDomain.CurrentDomain.SetData賦值過去的,如果當前程式的目錄以”\bin\Debug\”或者”\bin\Release\”,則認為它是運行在Visual Studio環境中的,就取項目的目錄然後賦值給DataDirectory的這個Key。

  1. 串連SQL Server

(1) 連接字串:程式通過連接字串指定要串連到那台伺服器上的,那個執行個體的那個資料庫,用什麼使用者名稱和密碼。

(2) 項目內嵌mdf檔案形式的連結字串為:

“DataSource=.\SqlExpress;AttachDBFilename=|DataDirectory|\Database.mdf|; Integrated.Security=True;User InStance=True”。

註解:.\SqlExpress表示”本機上的SQLExpress執行個體”如果資料庫執行個體名不是SQLExpress,則需要修改。

(3) ADO.NET中通過SqlConnection類建立到SQL Server的串連,SqlConnection代表一個資料庫連接,ADO.NET中的串連等資源都實現了IDisposable介面,可以使用using進行資源管理。
(4) 釋放資源的兩種方法:

(1)  using( )                           (2)  try

    {                                      {     }

                                                                          catch

    }                                                                    {

                                                                                 conn.Close();

                                                                                 conn.Dispose();

}

  1. 執行簡單的Insert語句

(1) SqlCommand表示向伺服器提交一個命令(SQL語句等)。

CommandText屬性為要執行的SQL語句,ExecuteNonQuery方法執行一個非查詢語句(Update,Insert,Delete)等。

using(SqlCommand cmd=conn.CreateCommand())

{

cmd.CommandText=”Insert into myTable1(name) values(‘abc’)”;

cmd.ExecuteNonQuery();
}

(2) ExecuteNonQuery傳回值是執行受影響的行數。

  1. 執行查詢

(1) 執行有多行結果集的用ExecuteReader。

SqlDataReader reader=cmd.ExecuteReader();

   While(reader.Read())

   {

               Console.WriteLine(reader.GetString());

}

       (2) reader的GetString,GetInt32等方法只能接受整數參數,也就是序號,用GetOrdinal()方法根據列名動態得到序號。

(3) close和Dispose的區別:

  1) close關閉以後還能開啟。

  2) Dispose:直接銷毀,不能再次使用。

  3) using在出了範圍以後調用Dispose,SqlConnection,FileStream等的Dispose內部都會做這樣的判斷,判斷有沒有close,如果沒有close就先close在釋放資源Dispose。

  1. ExecuteScalar

(1) SqlCommand的ExecuteScalar方法用於執行查詢,並返回查詢所返回的結果集中的第一行第一列,因為不能確定傳回值的類型,所以傳回值是object類型。

  cmd.CommandText=”Select count(*) from T_Users”;

 int i=Convert.ToInt32(cmd.ExecuteScalar());

(2) 得到自動成長欄位的值,在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());

  1. SQL注入漏洞攻擊

(1) 登入判斷:select * from T_Users where username=….  and Password=…..;將參數拼接到SQL語句中。

(2) 構造惡意的password=’or’1’=’1

(3) 防範注入漏洞攻擊的方法:不使用SQL語句拼接,通過參數賦值。

  1. 查詢參數

(1) SQl語句使用@UserName表示”此處用參數代替”,向SqlCommand的Parameters中添加參數。

cmd.CommandText=”Select * from T_User where username=@username and Password=@pwd”;

cmd.Parameters.Add(new SqlParameters(“username”,”admin”));

cmd.Parameters.Add(new SqlParameters(”password”,”888888”));

(2) 參數在SQL Server內部不是簡單的字串替換,SQL Server直接用添加的值進行資料比較,因此不會有注入漏洞攻擊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.