Winform基础程序和ADO.NET基础

  1.第一个WinForm程序

(1) WinForm: Windows Form,  .NET中用来支付Windows窗口应用程序的技艺。

(2)
控件:窗口上海重机厂首要素都以形似的,因而将这一个要素抽象成一些类,那一个类就叫做控件。按钮(Button),文本框(TextBox),标签(Label),单选按钮(RadioButton),复选框(CheckBox)。

(3) 复习TryParse

int.TryParse:将数字的字符串表示格局转换为它的相同三19位有记号整数,1个提示操作是还是不是中标的重临值。

语法结构: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代表1个数据库连接,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) 执行有多行结果集的用Execute里德r。

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方法用于实践查询,并重返查询所再次来到的结果集中的第2行第①列,因为无法明显再次来到值的花色,所以重返值是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直接用丰富的值实行数量比较,因而不会有注入漏洞攻击。

相关文章