Winform基础程序和ADO.NET基础

  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直接用丰富的价进行多少比较,因此不会见来渗漏洞攻击。

相关文章