【C#】Winform常用属性和事件笔记大全(入门者参考)

   一、窗体

        创建一个"Windows窗体应用程序"
        将主窗体的名称改为规则名称
            Frm开头,后缀见名知意,遵从大驼峰命名法.
        窗体应用程序是一个闭源软件,所以源代码不会公开,当一个软件在开发完之后,将本项目下/bin/debug目录下的可执行应用程序拷贝或剪切,提供给使用者即可.
        如没有可执行应用程序,需要在vs中重新生成后即可.

        1、【属性】

            Size:调整窗体宽高
            Text:设置窗体标题名称
            Icon:改变窗体默认图标
            StartPosition:初始打开软件窗体默认在屏幕中的位置,常用值:CenterScreen居中显示
            WindowState:初始打开软件窗体默认打开的方式,常用值:Maximized最大化显示
            MaximizeBox:在标题栏中启/禁用最大化按钮.True默认启用,False禁用
            MinimizeBox:在标题栏中启/禁用最小化按钮.True默认启用,False禁用
            BackColor:设置窗体背景颜色,背景颜色均是微软自带
            BackgroundImage:设置窗体背景图片,推荐使用"项目资源文件"点击导入图片的方式.
            BackgroundImageLayout:设置图片的平铺方式,
                常用值:
                    Stretch将图片拉伸至窗体大小铺满.
                    Zoom将图片等比例缩放至窗体大小.
            ShowIcon:是否显示标题栏图标和任务栏图标,True默认显示,False不显示.
            ShowInTaskbar:是否在任务栏中显示当前程序.True默认显示,False不显示.
            TopMost:设置窗体置顶(永远在屏幕最前端显示),False默认不置顶,True置顶.
            FormBorderStyle:设置窗体的边框样式,常用值:
                Sizable默认值,有Windows自带边框
                None,无边框
                FixedSingle,无法调整窗口大小
            opacity:调整整个窗口的透明度
            isMdiContainer:让当前窗体变成父mdi窗体,改为True后即可.
                如何让两个窗体成为mdi父子
                    1>改变主窗体的isMdiContainer的属性值为True
                    2>在相应的点击事件中创建子窗体对象的同时,加上以下代码:
                        FrmAddSingerType fast = new FrmAddSingerType();
                        fast.MdiParent = this;
                        fast.Show();

            创建一个窗体,将窗口的宽高调整为700,500
            标题文字设置为KTV后台管理系统
            图标自行设置
            默认打开窗体的位置在屏幕正中央
            不允许最大化和最小化
            自行设置一张合格的背景图
            背景图片要占满整个窗体
            窗体要永远保持在最前端
            窗口不允许被手动调整大小
            透明度调整为90%

    2.【控件】

        Label
            Name:为当前控件命名正确的名称,规则以lbl开头,其余均一致.
            在窗体中显示文字
            属性:
                Text:可以编辑要显示的文字.
                Font:可以调整字体样式以及风格.
                BackColor:可以设置控件的背景颜色.
                ForeColor:可以设置控件的字体颜色.
                
        TextBox
            在窗体中输入文本或密文
            属性:
                Name:为当前控件命名正确的名称,规则以txt开头,后缀见名知意,并且要遵从小驼峰命名法.
                Text:可以设置默认文本.
                Font:与Label中的Font相同,同时可以改变当前控件的高度.
                UseSystemPasswordChar:可以设置文本为密文显示,默认False,True以密文显示.
                PasswordChar:可以手动指定密文显示符号,但UseSystemPasswordChar的属性值为False时才生效.
                ReadOnly:可以设置控件为只读.
                Multiline:可以更改为多行文本,默认False,为True时则改为多行输入文本.
                MaxLength:可以设置控件输入文本的最大长度.
                TabIndex:在同一窗体,获取焦点的顺序.

        Button
            在窗体设置按钮
            属性:
                Name:为当前控件命名正确的名称,规则以btn开头,其余均一致.
                Text:设置按钮文本内容.
                Size:调整按钮宽高.
                TabIndex:与之前一致.
                TextAlign:设置按钮中内容的水平与垂直对齐方式.
                Font:与之前一致.
                ForeColor:与之前一致.
                BackColor:与之前一致.
                BackgroundImage:与之前一致.
                BackgroundImageLayout:与之前一致.
                Enable:设置当前按钮是否为启/禁用状态,True默认值,False禁用.
                FlatStyle:切换按钮2D/3D的样式.默认值Standard[3D],常用值Flat[2D模式]
                FlatAppearance:设置2D模式下按钮的相关样式.
                    BorderColor:设置边框颜色.
                    BorderSize:设置边框粗细.
                    MouseDownBackColor:鼠标按下时设置背景颜色.
                    MouseOverBackColor:鼠标移入时设置背景颜色.

        RadioButton
            在窗体设置单选按钮
            属性:
                Name:为当前控件命名正确的名称,规则以rbtn开头,其余均一致.
                Text:设置单选按钮文本内容.

        GroupBox
            设置编组,可以用于不同组的单选按钮的分组.
            属性:
                Name:为当前控件命名正确的名称,规则以gb开头,其余均一致.
                Text:设置单选按钮文本内容.

        CheckBox
            在窗体设置复选按钮
            属性:
                Name:为当前控件命名正确的名称,规则以ckb开头,其余均一致.
                Text:设置复选按钮文本内容.

        ComboBox
            在窗体设置下拉菜单
            属性:
                Name:为当前控件命名正确的名称,规则以cbo开头,其余均一致.
                DropDownStyle:设置下拉菜单其中一个属性是不可编辑的[DropDownList].
                Items:设置下拉菜单选项内容.

        DateTimePicker
            在窗体设置日期+时间选择文本框
            属性:
                Name:为当前控件命名正确的名称,规则以dp开头,其余均一致.
                Value:设置默认日期文本.
                MinDate:设置日期的最小日期.
                MaxDate:设置日期的最大日期.

        PictureBox
            在窗体显示图片
            属性:
                Name:为当前控件命名正确的名称,规则以pic开头,其余均一致.
                BackColor:与之前一致.
                BackgroundImage:与之前一致.
                BackgroundImageLayout:与之前一致.
                Image:设置图片,使用项目资源文件的方式导入图片.
                SizeMode:设置图片的显示模式,StretchImage图片随控件大小平铺.Zoom按照等比例缩放随控件大小平铺.AutoSize控件随图片大小而定.

        MenuStrip
            在窗体设置顶部菜单
                ToolsStripMenuItem
                    在顶部菜单中设置菜单项
                    属性:
                        Name:为当前控件命名正确的名称,规则以tsmi开头,其余均一致.
                ToolsStrip
                    在顶部菜单下面设置工具栏
                    属性:
                        Name:为当前控件命名正确的名称,规则以tsbtn开头,其余均一致.
                        Image:设置图片,使用项目资源文件的方式导入图片.
                        ImageScaling:改变工具栏的图标尺寸.
                            SizeToFit:以工具栏默认大小来划分尺寸.
                            None:以图片本身的大小来划分尺寸.
                        DisplayStyle:设置工具栏的显示方式
                            Image:只显示图标.
                            ImageAndText:既显示图标又显示文字.

        Panel
            属性:
                Name:为当前控件命名正确的名称,规则以pnl开头,其余均一致.
        FlowLayoutPanel
            属性:
                Name:为当前控件命名正确的名称,规则以flpnl开头,其余均一致.
        Panel和FlowLayoutPanel共同拥有的属性:
            BorderStyle:设置是否有边框
                None:默认值,即没有边框.
                FixedSinger:2D边框.
                Fixed3D:3D边框,有凹陷的感觉.
            AutoScroll:是否允许设置横/竖滚动条
                False:默认值,没有滚动条.
                True:当内容超出了Panel的范围之外,则自动出现滚动条.

        ContextMenuStrip
            在窗体设置右键菜单

        Timer
            在窗体中设置定时器
            属性:
                Name:为当前控件命名正确的名称,规则以timer开头,其余均一致.
                Enabled:决定是否启动定时器,True启动,False停止
                Interval:指定时间后重复执行事件,单位毫秒,它与定时器事件绑定,在指定毫秒数后会一直重复执行.
            独有事件:
                Tick:任何在Tick事件中设置的代码都会在定时器触发后重复执行.

        DataGridView(缩写dgv)
        数据网格控件
        属性
            SelectionMode    选择模式
                FullRowSelect 整行选取
                // dgv控件.SelectedRows.Count == 0 必须在整行选择时,才能获取到选择的行
                    可以获取多行
                // dgv控件.CurrentRow == null 获取的是DataGridViewRow对象,不管选择哪一列,都会把整行选择
                    但是只能选择一行
            RowHeadersVisible
                FALSE 不显示行标
                TRUE 显示行标
            GridColor网格颜色
            ColumnHeadersBorderStyle列头边框
                None去掉
            EnableHeadersVisualStyles
                False 关闭列头自动设置
            ColumnHeadersDefaultCellStyle设置默认列标题样式
                Alignment布局:MiddleCenter内容居中
                BackColor:背景颜色
                SelectionBackColor:选中的背景颜色
            CellBorderStyle单元格边框
                None去掉    
            ColumnHeadersHeightSizeMode是否允许调整列头字体大小
                EnableResizing允许更改尺寸
            ColumnHeadersHeight调整标题大小
                用数字调整大小
            RowTemplate行模板
                DefaultCellStyle:调整单元格样式
                Resizable:允许调整行大小
                    True,False
                Height:用数字调整高度
        绑定后台数据
            1>创建实体类
                创建一个类,类名为当前查询的表名名称,记住遵从大驼峰命名法
                类中的属性从while中处理的字段进行封装,封装用prop(按两下Table),记住属性名开头大写
            2>创建List集合,泛型约束第一步创建好的实体类
                在while中创建实体类的对象,将while中所提取的变量分别对当前实体类对象中的每一个属性完成赋值.
                最终把当前对象放入List集合中
            3>将集合中的所有数据全部绑定至dgv中
                范例:
                    dgv控件名称.DataSource = new BindingList<集合的泛型约束类型>(集合对象名称);
                举例说明:
                    dgvShowSingerTypes.DataSource = new BindingList<SingerType>(singerTypes);
            4>将实体类的每个属性名复制到记事本中
                回到前台找到dgv中右上角的小三角,点开后找到编辑列.在编辑列中找到选定的列,将每个属性名均粘贴到对应的列属性中DataPropertyName中
                切记千万不要有任何的空格或其他符号.

        ContextMenuStrip(缩写cms)
            右键快捷菜单
            属性
                FullRowSelect,是否选择整行
                    TRUE,FALSE

    做删除业务,需要先获取被选中的项,有了项就可以删除所有子项
        控件.SelectedItems[0]    这里要告诉学生,一旦见到Selected就一定是被选中的,比如Checked等等...

    弹窗
        DialogResult dr = MessageBox.Show("主要提示语", "菜单栏提示语", MessageBoxButtons按钮设置, MessageBoxIcon图标设置);
        dr.ToString():会根据用户选择的按钮接收不同的字符语句.可以继续做判断.
        快捷键:mb 按键盘两下Table即可补全代码.

    事件
        定义:人机交互
            F7 - 从设计页面切换到代码页面
            Shift+F7 - 从代码页面切换到设计页面
        Click:大部分的控件都拥有鼠标左键单击事件
        Load:此事件只有窗体拥有.当此窗体被运行之后但被打开之前,此事件被触发.一般情况下此事件都应用于该窗体被打开前的一些准备工作.
        MouseMove:鼠标移入控件时发生事件.
        MouseLeave:鼠标移出控件时发生事件.
        TextChanged:当控件中文本内容发生变化时,就会触发当前事件.
        MouseDoubleClick:当鼠标左键双击控件时触发事件.

三、c#运行环境+开发环境  .NET(dot NET)

c#开发程序三步走:编写、编译、运行

1、使用Visual Studio创建项目
    项目命名
        项目名称:当前项目的名称
        解决方案名称:总项目的名称,总项目下可以有n个子项目.

    字下美人数骆驼
        字下美人(名称允许以这4个方式开头)
            字:字母
            下:_
            美:$
            人:¥
        数骆驼
            遵从驼峰命名规则
                小:每个单词的开头小写,其后每个单词首字母均大写
                大:每个单词的开头均要大写.

    类命名
        见名知意
        大驼峰命名法
            
    注释
        单行注释
            // 说明
        多行注释
            /* 说明 */ 
        文档注释(相当于多行注释)
            /// 说明

    Visual Studio常用快捷键
        整理代码(格式化代码)
            Ctrl + k + d
            当每一行代码编写完毕后,用分号;结束整个一行语句的同时,会自动整理这一行的代码
        输出语句的快捷键
            cw 按两下Table键
        启动程序的快捷键
            Ctrl + F5

    控制台输出语句
        Console.WriteLine("") : 输出文本内容后自动换行
        Console.Write("") : 输出文本内容后不自动换行

    转义符(存在双引号中的符号)
        \n : 换行
        \t : 缩进一个制表符(相当于按table键)
        \ : 可以转义任何特殊符号

    c#自带数据类型
        基本数据类型(四类八种)
            第一类
                字符类型
                    char
                    定义一个char类型并赋值
                        char eng = 'H'
                        char[] hw = {'H','e','l','l','o','W','o','r','l','d'}
                        string s = "HelloWorld"
            第二类
                布尔类型
                    bool
                        判断对错,true/false
            第三类
                整数类型
                                                范围                            在程序运行后所占内存空间
                    byte字节                    -128 ~ 127                                1byte
                    short短整数                -32768 ~ 32767                            2byte
                    int整数(c#默认类型)        -2147483648 ~ 2147483647                4byte
                    long长整数                -2305843009213693952                     8byte
                                            ~ 2305843009213693951
            第四类
                浮点类型
                    float                                                            4byte
                    double                   ±1.789 * 1000...000(308个0)                8byte
            
            硬盘容量的单位(从小到大)
                byte(8bit)
                kb
                mb
                gb
                tb

        对象类型
            String : 字符串[文本],双引号描述java中的字符串, ""

    变量[可变的量]
        定义变量接收我们想要计算的值.
        变量需要命名
            规则:
                1>见名知意
                2>遵从小驼峰命名法
    运算符
        赋值运算符
            = : 将右侧的值赋予左侧的变量
        算术运算符
            + - * / % ++ -- += -= *= /= %=
        关系运算符
            > < >= <= == !=
        逻辑运算符(多个判断在一个条件中时,必须用逻辑运算符进行拼接.)
            && || !
            如果多判断用&&拼接,则每个判断的结果均为true时,最终结果即为true.反之,只要有一个判断的结果为false,则最终结果为false
            如果多判断用||拼接,则只要有一个判断的结果为true时,最终结果即为true.反之,所有判断的结果均为false时,则最终结果为false.

    c#运算铁定法则
        a>int和int的2个变量之间进行运算,那么其结果是int.
        b>int和double的2个变量之间进行运算,那么其结果是double.
        c>String类型的变量也可以与其他变量进行加法运算(只允许),而且其结果为String类型,简称丧尸效应.

    定义变量
        3步走
            1>定义数据类型
                int nianLing;
            2>定义值
                10;
            3>将定义好的值赋给变量
                nianLing = 10;
        简写方式
            int nianLing = 10;
        使用变量
            用变量名与其他数值进行计算.


    强制类型转换(double转int才能出现)
        举例说明:
            --------------------自动类型转换----------------------
            int j = 100;
            double d = j;
            Console.WriteLine(d);
            -----------------------------------------------------
        
            --------------------强制类型转换----------------------
            double _d = 15.3;
            // 强制类型转换(double转int才能出现)
            int _j = (int) _d;
            -----------------------------------------------------

    string转其他类型
        string转int
            int r = Convert.ToInt("10");
        string转double
            double r = Convert.ToDouble("3.14");

    输入
        1>定义输出语句
            Console.WriteLine("请输入...")
        2>定义变量,用来接收用户输入的内容
            string name = Console.ReadLine();
        3>使用变量(爱怎么用怎么用)

    随机数

    选择结构
        if-else(生死门:无论有多少种选择,必须要选择一条路,且仅能选择一条路)
            if(条件)// 条件如结果为true时,则会进入if结构中执行里面的代码
            {

            }
            多重if
                if-else if-else if-...-else
            
        switch
            string choose = "1";
            switch(choose) 
            {
                case "1":
                    break;
                case "2":
                    break;
                default:
                    break;
            }

    循环
        想要学好循环必须要掌握的三要素
            1>定义初始值(循环开始)
            2>定义条件(循环结束)
            3>定义迭代(循环过程)

        while
            初始值;
            while(条件) 
            {
                迭代;
            }
            特点:先判断,后执行.

            执行过程:
                1>定义变量赋值初始值.
                2>定义条件.根据条件的返回值来判断是否进入循环.
                3>如返回值为true,则进入循环体中,执行里层的所有代码.
                4>如返回值为false,则退出整个循环,不再执行.
                int i = 1;  // ①
                while(i < 5)
                {  // ②
                    i++; // ③
                }

                ①②③ | ②③ | ②③ | ②③

        do-while
            初始值;
            do
            {
                迭代;
            }while(条件);
            特点:先执行,后判断.

            执行过程:
                1>定义变量赋值初始值.
                2>进入循环中,执行里层所有代码.
                3>定义条件,以条件的返回值来判断是否再次循环执行.
                4>条件返回值为true,继续执行里层代码,如条件返回值为false,则退出整个循环.
                int i = 1;  // ①
                do 
                {
                    i++; // ③
                } while (i < 6);  // ②

                ①③② | ③② | ③② | ③② | ③② | ③②

        for
            for(初始值;条件;迭代)
            {

            }
            
            执行过程:
                1>定义好初始值、条件、迭代.
                2>根据初始值判断条件,根据条件的返回值判断是否进入循环.
                3>如返回值为false,则退出整个循环.
                4>如返回值为true,则进入循环执行里层所有代码.
                5>执行完毕后,继续迭代,然后继续判断条件.如此反复,直至循环结束.
                //     ①        ②    ③
                for(int i = 0;i < 3;i++)
                {
                    Console.WriteLine("这是第" + i + "次恋爱失败"); // ④
                }

                ①②④③ | ②④③ | ②④③ | ②

        break
            break在循环中起到的作用是终止整个循环.
        continue
            continue在循环中起到的作用是终止当前循环.

        数组
            定义:可以同时保存多个数值,而不像变量,一个变量只能保存一个值.
            
              // 创建数组的方式1:只创建不赋值
            string[] names = new string[100];
            // 0-9
            names[0] = "邱远飞";
            names[1] = "吕铭扬";
            names[2] = "郭荣栋";
            names[3] = "车尊雷";
            names[4] = "赵磊";

            // 创建数组的方式2:即创建又赋值,但无法手动定义数组的长度
            int[] scores = { 18, 96, 23, 57, 84, 21 };

        数据类型在定义数组时的默认值
            String null
            int    0
            double 0.0

面向对象的基础(类和对象)
    类
        用类的方式去描述现实生活当中的某些事物.
        我们自己定义的一个类,在Java也是一种数据类型,只不过这个类型是自定义类型
        作用:就是为了创建一个又一个的对象
        一个类中只能存在两种东西
            属性和方法

        属性
            描述类的特征
            组成部分:
                权限(public[公开])
                    只要用public定义的类或属性或方法,那么说明这个东西对于项目来说是完全公开的.
                类型
                变量名
                例:public String name;

        方法
            描述类的行为
            将一系列的过程或步骤组合到一起就被称之为方法
            组成部分:
                权限
                返回值
                    作用:给外界提供一个最终的结果.
                    具体实现:
                        1>将void改为你想返回的数据类型.
                        2>在方法体内定义return 定义返回的数据类型具体的值
                    return的作用
                        1>终止方法的继续执行.
                        2>可以为方法提供具体的返回值.
                    规定:
                        1>一个方法只要定义了返回值类型后,在方法体内至少要有一个return返回具体的值
                        2>一个方法只能定义一个返回值类型.
                        3>一个方法只能返回一个具体的值

                方法名称
                参数列表
                方法体
                例:
                    public void run() 
                    {

                    }

            方法中可以直接调用本类的属性
            定义方法的好处:
                可以将一系列的步骤组成一件事.
                可以简便的实现后续功能的更新
                代码的复用

    对象
        在虚拟程序中真实存在的东西,每一个对象都是独立的、唯一的.

    String的常用方法
        String对象类型

        int - Length : 获取当前字符串的长度
            例:
                string s1 = "Hello World";
                int len = s1.Length; // 结果 11

        boolean - Equals() : 做两个字符串等值判断,并且不忽略大小写
            例:
                string s1 = "Hello World";
                string s2 = "Hello WOrld";
                boolean f = s1.Equals(s2);
                Console.WriteLine(f);  // 结果 false

        string - ToLower() : 将字符串中所有英文全部转换成小写`
            例:
                string s1 = "Hello TCAS1357";
                s1 = s1.ToLower();
                Console.WriteLine(s1);// 结果 hello tcas1357

        string - ToUpper() : 将字符串中所有英文全部转换成大写
            例:
                string s2 = "hello tcas1357";
                s2 = s2.ToUpper();
                Console.WriteLine(s2);// 结果 HELLO TCAS1357


        int - IndexOf(string str) : 在整个字符串中从左至右寻找第一个指定的str字符是否存在,返回值为str字符的当前下标
            例:
                string s1 = "Hello Java";
                int r = s1.IndexOf("a");
                Console.WriteLine(r);// 结果 7


        int - LastIndexOf(string str) : 在整个字符串中从右至左寻找第一个指定的str字符是否存在,返回值为str字符的当前下标
            例:
                string s1 = "Hello Java";
                int r = s1.LastIndexOf("a");
                Console.WriteLine(r);// 结果 9

        string - SubString(int start) : 用于截取整个字符串,从指定的start下标开始向右截取至结尾,最终返回的类型就是截取的结果.
            例:
                string s = "我正在学习Java,我爱Java,胜过爱我女朋友";
                s = s.Substring(10);
                Console.WriteLine(s);// 结果: 我爱Java,胜过爱我女朋友

        string - SubString(int start, int len) : 用于截取整个字符串,从指定的start下标开始向右截取至指定len长度结束,最终返回的类型就是截取的结果.需要注意的是在截取中start下标是被包含在截取内的,而len代表的意思则是向后截取的长度.
            例:
                string s = "我正在学习Java,我爱Java,胜过爱我女朋友";
                s = s.Substring(10, 16);
                Console.WriteLine(s);// 结果: 我爱Java

        string - Replace(string oldStr, string newStr) : 用于替换整个字符串,将指定的oldStr替换为newStr.
            例:
                string weiChar = "我爱女朋友";
                weiChar = weiChar.Replace("女朋友", "Java");
                Console.WriteLine(weiChar);// 结果:我爱Java

        string[] - Split() : 用于将整个字符串以指定的qieGe变量进行切割字符串,切割后将会有多个字符串,用时string数组接收.
            例:
                string s7 = "是$国#人!我%中&一_名+";
                char[] qieGe = { '$', '#', '!', '%', '&', '_', '+' };
                string[] jieGuo = s7.Split(qieGe);
                for (int i = 0; i < jieGuo.Length; i++)
                {
                    Console.Write(jieGuo[i]);
                }
                Console.WriteLine("\n");
                Console.WriteLine(
                    jieGuo[3] + jieGuo[0] + jieGuo[5] + jieGuo[6] + jieGuo[4] + jieGuo[1] + jieGuo[2]
                );
                // 结果: 我是一名中国人
        StringBuilder
            作用:为了节省内存空间,凡是定义的String的变量只要后续需要不断拼接新的字符串来更新文本,那么优先推荐使用StringBuilder
            方法:
                Append(String s):追加新的字符串
            好处:
                内存中始终只有一个字符串对象,而不会像String类型重复创建内存地址来存储新的字符串对象,节省内存空间,减少服务器内存压力.

数据库
    用来存储网络中大量用户数据的一种方式.
    流行关系型数据库:
        Oracle
        SqlServer
        MySQL
    SqlServer数据库是S1阶段重点学习的数据库
        此数据库软件是微软的一款产品,与系统有着非常良好的兼容性,并且易操作.
    数据库的基本概念
        数据仓库:
            SqlServer数据库我们可以把它比喻成一片空地,而这片空地是用来存储粮食的.我们不能把粮食直接倒在平地上,这样很快就发霉腐败.那么就需要在这片空地上盖起一座又一座的仓库,我们称之为数据仓库.
        数据表:
            数据仓库盖起来之后,我们可能需要存储很多不同类型的数据,那么就需要建立表来存一种类型的数据.
        数据字段:
            一张表可以存储一种类型的数据,例如学生的基本信息、员工的基本信息、商品的基本信息等等.而每一种类型的信息都会细化出很多信息,例如学生的信息有姓名、出生日期、家庭住址等,那么这时候一张表中就需要用字段的方式来存储同一列下的信息.
        数据字段类型:
            为了保证同一列下的数据都是相对准确和完整的,就需要进行类型约束,例如学生姓名要求是字符串类型的,学生年龄要求是整数类型的,学生身高要求是浮点数类型的,学生入学日期是日期类型的等等.那么在创建表的同时就要对其数据字段进行标识类型.具体常用类型如下:

                varchar    字符串,定义时需要用小括号的方式指定字符长度,一旦指定后再添加数据就不允许超出长度.
                int        整数
                float       浮点数 
                date        日期(包括日期和时间),默认日期2021/6/4 15:34:05

    创建数据库
        首先保证SqlServer数据库的服务[Sql Server(MSSQLSERVER)]是必须要开启.
        如何开启服务-1(win10推荐使用)
            如何找到?可以Win+r打开运行,输入services.msc,打开服务窗口,在服务窗口找到服务,右键启动.
            如何自启动?找到服务后,右键属性,在属性栏中将启动类型改为自动.
        如何开启服务-2(win7推荐使用)
            Win+r打开运行,输入net start mssqlserver回车后即可开启服务,再次打开运行输入net stop mssqlserver即可关闭服务

    创建数据表
        先想好需要添加字段名称以及字段类型,之后手动进行编写字段名称和类型完成添加.
        当字段全部添加好后,按Ctrl+s保存后,在弹出的框中填写当前表名,点击确定即可.

    表的约束
        在创建表的同时,约束字段中的数据.
        唯一约束
            如何某个字段添加了唯一约束,那么这个字段在添加数据时就要检查这条数据是否与已存在的数据重复.如果重复,则禁止添加.
        非空约束
            如果某个字段添加了非空约束,那么这个字段在执行添加的SQL语句的时候,就要检查当前这个字段是否有数据,如果未添加数据,则整条SQL语句禁止执行.
        主键约束
            特征:
                1>它是唯一约束和非空约束的集合体.
                2>被添加了此项约束的字段一般情况下就会在整张表的第一个字段的位置出现.
                3>并且字段名称肯定会有id存在,命名规则一般情况下是以表名的开头字母为前缀,以id为后缀,中间或以下个线分隔或无.
                    例:
                        表名:Student
                        主键ID字段名称:sid或s_id
                        表名:Employee
                        主键ID字段名称:eid或e_id
                        表名:XXX
                        主键ID字段名称:id
                4>一张表一般情况下只会有一个字段拥有主键约束.
                5>主键ID的数据类型必须是int类型
                6>主键ID的值不用手动添加,而是在每次编写SQL添加语句时,它的数据自动增长.
            作用:
                1>当前字段下的每一行数据都是用来标识当前整行在整张表中是唯一的.
                2>A表的主键用来标识B表的其中一个字段,而这个字段就是用来标识当前行数据在A表中所处的类型.这种现象就被称之为外键.

    SQL语言(句)
        常规讲,即实现对数据表的数据进行增删改查(CRUD)等操作
        学习前需准备以下表结构和表数据

            KTV数据库
                [[[SingerType歌星类型表]]]

                    [[[字段名称]]]            [[[说明]]]            [[[类型]]]                         [[[约束]]]
                       Stid                    主键ID                int                             主键,自增
                    SingerTypeName            类型名称              varchar(50)                非空,唯一(出现相同类型名称无意义)

                    模拟数据:
                    1         大陆
                    2        港台
                    3        欧美
                    4        日韩
                    5        新加坡

                [[[Singer歌星表]]]

                    [[[字段名称]]]            [[[说明]]]            [[[类型]]]                         [[[约束]]]
                        Sid                   主键ID                int                                主键,自增
                     SingerName               歌星姓名            varchar(50)                       非空
                       Stid                   歌星类型ID             int                            非空
                       Sex               歌星性别(男、女、组合)     varchar(50)                           非空
                      Photo                 歌星头像图片              varchar(200)                        非空、唯一
                              注:因所有歌星图片都放在一个服务器文件夹进行管理,所以文件名必须保证不能重复
                      Spell                 歌星首字母拼音          varchar(50)                        非空
                    
                    模拟数据:
                    1         周杰伦            2         男         zhoujielun.jpg        ZJL
                    2        孙燕姿             5         女         sunyanzi.jpg         SYZ
                    3        许嵩                  1         男         xusong.jpg             XS
                    4        滨崎步             4         女         binqibu.jpg         BQB
                    5        席琳迪翁            3         女         xilindiweng.jpg     XLDW

                [[[SongType歌曲类型表]]]

                    [[[字段名称]]]            [[[说明]]]            [[[类型]]]                         [[[约束]]]
                       Sotid                   主键ID                int                             主键,自增
                    SongTypeName              类型名称              varchar(50)                非空,唯一(出现相同类型名称无意义)

                    模拟数据:
                    1         流行
                    2        爵士
                    3        古典
                    4        摇滚
                    5        戏曲

                [[[Song歌曲表]]]
                    [[[字段名称]]]            [[[说明]]]            [[[类型]]]                         [[[约束]]]
                      Soid                      主键ID                  int                               主键,自增
                      SongName                  歌曲名称             varchar(100)                       非空
                      Spell                歌曲首字母拼音         varchar(100)                       非空
                      WordCount                 歌曲字数             varchar(100)                       非空
                      Sotid                  歌曲类型ID               int                               非空
                      Sid                    歌曲所属歌星ID           int                               非空
                      Url                      歌曲MTV名称         varchar(100)                     非空、唯一
                              注:因所有歌星MTV视频文件都放在一个服务器文件夹进行管理,所以文件名必须保证不能重复    
                      Clicks                歌曲被点歌次数           int                                  非空

                    模拟数据
                    1        七里香                    QLX        3        1        1        七里香.mp4                56
                    2        爱情证书                    AQZS    4        1        2        爱情证书.mp4             31
                    3        庐州月                    LZY        3        3        3        庐州月.mp4                 109
                    4        The Show Must Go On     TSMGO   19         4        4        TheShowMustGoOn.mp4     11
                    5        My Heart Will Go On     MHWGO     19        3        5        MyHeartWillGoOn.mp4        99

                [[[Administrator-KTV管理员]]]

                    [[[字段名称]]]            [[[说明]]]            [[[类型]]]                         [[[约束]]]
                       Id                     主键ID                    int                            主键,自增
                    UserCode                管理员账号              varchar(50)                    非空,唯一
                    Password                管理员密码              varchar(50)                    非空,唯一

                    模拟数据:
                    1         zuishuaizhaolaoshi         zszls8888
                    2        zhangbosen                zbs6666
                    3        wumengda                wmd7890

        添加数据
            添加单条数据
                INSERT INTO 数据表名称
                (字段名称1, 字段名称2, 字段名称3, ...)
                VALUES
                (字段1的实际值, 字段2的实际值, 字段3的实际值, ...);

            同时添加多条数据
                INSERT INTO 数据表名称
                (字段名称1, 字段名称2, 字段名称3, ...)
                VALUES
                (字段1的实际值, 字段2的实际值, 字段3的实际值, ...),
                (字段1的实际值, 字段2的实际值, 字段3的实际值, ...),
                (字段1的实际值, 字段2的实际值, 字段3的实际值, ...),
                ...;

            添加数据时对于日期字段想要获取当前日期和时间的处理
                INSERT INTO 数据表名称
                (日期字段)
                VALUES
                (GETDATE());


        对于某张表添加数据需要用到另外一张表的外键ID时的处理(需讲完单条件查询后方可学习)
            例:
                insert into employee
                (name,gongzi,jiangjin,ruzhishijian,did,pid)
                values
                (
                    '张世龙',
                    26000,
                    500,
                    GETDATE(),
                    (select id from depa where name = '开发部'),
                    (select id from post where name = '普通员工')
                )

        修改数据
            修改某个字段的全部数据
                UPDATE 数据表名称 SET
                修改字段名称1 = 字段1的实际修改值,
                修改字段名称2 = 字段2的实际修改值,
                ...

            修改某个字段的单行数据
                UPDATE 数据表名称 SET
                修改字段名称1 = 字段1的实际修改值,
                修改字段名称2 = 字段2的实际修改值,
                ...
                WHERE 
                根据字段名称 = 具体的值 当做条件进行查找对应的整行数据


        删除数据
            删除全部字段的全部数据
                DELETE FROM 数据表名称;
            删除全部字段的单条或部分数据
                DELETE FROM 数据表名称
                WHERE 根据字段名称 = 具体的值 当做条件进行查找对应的整行数据;

        查询(重中之重)

            全表全字段查询
                SELECT * FROM 表名
            全表分字段查询
                例:select SingerName,Sex from Singer;
            单条件全(分)字段查询
                例:select SingerName,Sex,Photo from Singer where SingerName = '刘德华'
            多条件全(分)字段查询(逻辑运算符 AND OR)
                例:select SingerName,Sex,Photo from Singer where SingerName = '刘德华' and sex = '男';
                例:select SingerName,Sex,Photo from Singer where SingerName = '刘德华' or sex = '男';
            函数查询
                AVG:求平均值
                    例:select avg(gongzi) from employee
                MIN:求最小值
                    例:select min(gongzi) from employee
                MAX:求最大值
                    例:select max(gongzi) from employee
                SUM:求和
                    例:select sum(gongzi) from employee
                COUNT:统计
                    例:select count(1) from employee;

            双表查询(INNER JOIN)
                -- 查询所有歌星信息(歌星ID,歌星姓名,歌星所属类型名称,歌星性别)
                select 
                    [Sid],
                    SingerName,
                    Sex,
                    SingerTypeName,
                    s.Stid as 歌星表中的类型ID,
                    st.Stid as 类型表中的类型ID
                from singer as s
                inner join SingerType as st 
                    on st.Stid = s.Stid

            多表查询
                找主表规则:凡是参与查询的所有表中的某张表的主键没有成为任何参与查询的表的外键,它就是主表(即老大)

                -- 查询歌曲信息(歌曲ID,歌曲名称,歌曲所属歌星姓名,歌曲类型名称,歌曲被点次数)3表查询
                    select
                        s.Soid,
                        s.SongName,
                        si.SingerName,
                        st.SongTypeName,
                        s.Clicks
                    from Song s
                    inner join SongType st 
                        on st.Sotid = s.Sotid
                    inner join Singer si 
                        on si.Sid = s.Sid

                -- 查询歌曲信息(歌曲ID,歌曲名称,歌曲所属类型名称,歌曲所属歌星姓名,歌曲所属歌星所属歌星类型)4表查询
                    select 
                        s.Soid,
                        s.SongName,
                        st.SongTypeName,
                        si.SingerName,
                        sit.SingerTypeName
                    from Song s
                    inner join SongType st 
                        on st.Sotid = s.Sotid
                    inner join Singer si 
                        on si.Sid = s.Sid
                    inner join SingerType sit 
                        on sit.Stid = si.Stid

            多表多条件查询
                -- 查询歌手类型为大陆的流行歌曲信息(歌曲名称,歌曲所属类型名称,歌曲所属歌星姓名,歌曲所属歌星所属歌星类型)
                select 
                    s.Soid,
                    s.SongName,
                    st.SongTypeName,
                    si.SingerName,
                    sit.SingerTypeName
                from Song s
                inner join SongType st 
                    on st.Sotid = s.Sotid
                inner join Singer si 
                    on si.Sid = s.Sid
                inner join SingerType sit 
                    on sit.Stid = si.Stid
                where 
                    sit.SingerTypeName = '大陆'
                    and 
                    st.SongTypeName = '流行'
                
                -- 查询歌手类型为大陆的刀郎歌星带有"情"字的流行歌曲信息
                    --(歌曲名称,歌曲所属类型名称,歌曲所属歌星姓名,歌曲所属歌星所属歌星类型)
                    select
                    s.Soid 歌曲ID,
                    s.SongName 歌曲名称,
                    st.SongTypeName,
                    si.SingerName,
                    sit.SingerTypeName
                    from Song s
                    inner join SongType st on st.Sotid = s.Sotid
                    inner join Singer si on si.Sid = s.Sid
                    inner join SingerType sit on sit.Stid = si.Stid
                    where 
                        st.SongTypeName = '流行'
                        and
                        sit.SingerTypeName = '大陆'
                        and
                        si.SingerName = '刀郎'
                        and
                        s.SongName like '%情%'

            模糊查询
                LIKE替代=
                %:忽略
                _:一个字符

                -- 搜索二个字的歌星信息
                    select * from Singer
                    where SingerName like '__'

                -- 搜索三个字的歌星信息
                    select * from Singer
                    where SingerName like '___'

                -- 搜索姓郑的歌星信息
                    select * from Singer
                    where SingerName like '郑%'

                -- 搜索带情字的歌曲信息
                    select * from Song
                    where SongName like '%情%'

    ADO.NET
        来自于c#,利用c#的ADO技术实现与数据库对接,实现CRUD.
        如何实现c#连接数据库(SQLSERVER)
        1.定义连接数据库所需要准备的连接字符串
            string conStr = "Data Source=.;Initial Catalog=KTV;Integrated Security=False;User ID=sa;Password=accp;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";
        2.定义需求(即定义SQL语句)
            例:
                StringBuilder sql = new StringBuilder();
                sql.Append(" insert into Singer  ");
                sql.Append(" (SingerName,Stid,Sex,Photo,Spell)  ");
                sql.Append(" values ");
                sql.Append(" ('TBOY',1,'组合','tboy.jpg','TB'); ");
        3.定义连接对象
            SqlConnection con = new SqlConnection(conStr);
        4.打开连接通道
            con.Open();
        5.创建执行对象,将准备好的SQL传输至数据库
            SqlCommand cmd = new SqlCommand(sql.ToString(), con);
        6.执行并返回结果.
            2种返回方式
                增删改
                    int r = cmd.ExecuteNonQuery();
                查
                    SqlDataReader sdr = cmd.ExecuteReader();
                    7.处理结果集数据
        最后一步.关闭资源
            con.close();
            sdr.close();

  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、主要属性: (1)Text属性:Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。Text属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可以在运行时通过读取Text属性来获得文本框的当前内容。 (2)MaxLength 属性:用来设置文本框允许输入字符的最大长度,该属性值为 0 时,不限制输入的字符数。 (3)MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行显示。值为false时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。 (4)HideSelection属性:用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,则不以选中的方式显示,值为 false将依旧以选中的方式显示。 (5)ReadOnly属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,值为 false时可读可写。 (6)PasswordChar 属性:是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。 (7) ScrollBars属性: 用来设置滚动条模式, 有四种选择: ScrollBars.None (无滚动条), ScrollBars.Horizontal(水平滚动条),ScrollBars.Vertical(垂直滚动条),ScrollBars.Both(水平和垂直滚动条)。 注意:只有当MultiLine属性为true时,该属性值才有效。在WordWrap属性值为true时, 水平滚动条将不起作用 (8)SelectionLength属性:用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示未选中任何字符。 (9)SelectionStart属性:用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符的位置为0,第二个字符的位置为1,依此类推。 (10)SelectedText 属性:用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代码中使用。 (11)Lines:该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放在 Lines数组的一个元素中。 (12)Modified:用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户是否修改了该控件的内容。值为true表示修改过,值为 false表示没有修改过。 (13)TextLength属性:用来获取控件中文本的长度。 (14)WordWrap:用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,值为 true,表示自动换到下一行的开始,值为false表示不自动换到下一行的开始。 2、常用方法: (1)AppendText方法:把一个字符串添加到文件框中文本的后面,调用的一般格式如下: 文本框对象.AppendText(str) 参数 str是要添加的字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敦厚的曹操

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值