【Mark】C#数据库 19_12_19

用一天时间学数据库,其实就是把书本上第12章代码敲一遍

下面是按照课本的步骤,先建数据库,再建实体数据模型

  • 第一步,新建基于服务的数据库
  • 第二步,新建表
  • 第三步,建实体数据模型,基于数据库的
  • 最后,使用 LINQ to Entities 访问实体对象(创建实例,查询,增添,删除)
  • 下面是MainWindow.xaml.cs代码:
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Data;

namespace DatabaseFirstExample
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        //创建一个实体框架上下文实例
        private MyDbEntities context7 = new MyDbEntities();     //此处为何不能用var

        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += Example04_Loaded;
            this.Loaded += Example05_Loaded;
            this.Unloaded += Example07_Unloaded;
            ShowResult();
            ShowResult8();  //作用是刷新一下显示出的数据库

            //使用Load方法加载对象
            using (var context = new MyDbEntities())
            {
                var q = from t in context.Student
                        where t.ChengJi >= 60
                        select new
                        {
                            学号 = t.XueHao,
                            姓名 = t.XingMing,
                            性别 = t.XingBie,
                            成绩 = t.ChengJi
                        };
                dataGrid1.ItemsSource = q.ToList();
            }

            //显示学号、姓名及其家庭成员信息
            using (var context = new MyDbEntities())
            {
                var q = from t1 in context.Student
                        from t2 in context.FamilyInfo
                        where t1.XueHao == t2.XueHao
                        select new
                        {

                            学号 = t1.XueHao,
                            姓名 = t1.XingMing,
                            家庭成员姓名 = t2.XingMing,
                            家庭成员性别 = t2.XingBie,
                            与本人关系 = t2.GuanXi
                        };  //end
                dataGrid4.ItemsSource = q.ToList();
            }
        }

        //利用LINQ to Entities查询多个对象
        void Example04_Loaded(object sender, RoutedEventArgs e)
        {
            //显示学生信息
            using(var context = new MyDbEntities())
            {
                var q = from t1 in context.Student
                        from t2 in context.XueYuan
                        where t1.XueYuanID == t2.XueYuanID
                        select new
                        {
                            学号 = t1.XueHao,
                            姓名 = t1.XingMing,
                            性别 = t1.XingBie,
                            学院 = t2.XueYuanMingCheng,
                            成绩 = t1.ChengJi
                        };  //语句的结束
                dataGrid2.ItemsSource = q.ToList();
            }
        }

        void Example05_Loaded(object sender, RoutedEventArgs e)
        {
            //统计所有姓王的学生人数以及这些学生的合计成绩
            using(var context = new MyDbEntities())
            {
                var q = from t in context.Student
                        where t.XingMing.StartsWith("王") == true
                        select t.ChengJi;   //结束
                txtResult.Text = string.Format("姓王的人数:{0},合计成绩:{1}", q.Count(), q.Sum());   //很简洁
                var q2 = from t2 in context.Student
                         select new
                         {
                             学号 = t2.XueHao,
                             姓名 = t2.XingMing,
                             成绩 = t2.ChengJi
                         };     //end
                dataGrid3.ItemsSource = q2.ToList();
            }
        }

        //使用实体框架和LINQ to Entities修改数据,先查询,修改后调用实体对象上下文的SaveChanges方法保存修改
        void Example07_Unloaded(object sender, RoutedEventArgs e)
        {
            context7.Dispose(); //释放该实例
        }

        private void btn_Click(object sender, RoutedEventArgs e)
        {
            Button btn = e.Source as Button;    //?点击按钮时使用该事件的按钮对象?
            if(btn.Content.ToString() == "use LINQ change")
            {
                var q = from t in context7.Student
                        where t.XingMing == "张三鱼"   //该不该用equals?
                        select t;
                foreach(var v in q)
                {
                    v.ChengJi += 1;
                }
                int i = context7.SaveChanges(); //返回值是修改的次数?
                txtInfo.Text = "使用LINQ修改了" + i + "条记录";
                ShowResult();
            }
            else if(btn.Content.ToString() == "use SQL change")
            {
                var db = context7.Database;
                try
                {
                    int i = db.ExecuteSqlCommand(
                        "update Student set ChengJi = ChengJi - 1 where XingMing = {0}", "张三鱼");
                    txtInfo.Text = "使用SQL修改了" + i + "条记录";
                    ShowResult();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("On failure:" + ex.Message);
                }
            }
        }

        private void ShowResult()
        {
            //由于SQL直接更改数据库,不修改实体上下文
            //所以必须获取新的实体上下文实例才能得到最新的数据
            if (context7 != null)
            {
                context7.Dispose();
                context7 = new MyDbEntities();
            }
            var q = from t in context7.Student
                    where t.XingMing == "张三鱼"
                    select new
                    {
                        姓名 = t.XingMing,
                        成绩 = t.ChengJi
                    };  //end
            dataGrid5.ItemsSource = q.ToList();
        }

        private void btn_Click8(object sender, RoutedEventArgs e)
        {
            string s = (e.Source as Button).Content.ToString(); //原理相同
            if(s == "添加数据")
            {
                using (var context = new MyDbEntities())
                {
                    Student student = new Student()
                    {
                        XueHao = "06001001",
                        XingMing = "胡启",
                        XingBie = "男",
                        XueYuanID = "01",
                        ChengJi = 77
                    };
                    try
                    {
                        context.Student.Add(student);   //添加数据
                        context.SaveChanges();  //每次对数据库更改后?使用该方法?
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("添加失败:" + ex.Message);
                    }
                    ShowResult8();
                }
            }
            else if(s == "删除数据")
            {
                using (var context = new MyDbEntities())
                {
                    var q = from t in context.Student
                            where t.XueHao == "06001001"
                            select t;
                    foreach(var v in q)
                    {
                        try
                        {
                            context.Student.Remove(v);  //删除数据
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("删除失败:" + ex.Message);
                        }
                    }
                    context.SaveChanges();
                    ShowResult8();
                }
            }
        }

        private void ShowResult8()
        {
            using (var context = new MyDbEntities())
            {
                var q = from t in context.Student
                        select new
                        {
                            学号 = t.XueHao,
                            姓名 = t.XingMing,
                            成绩 = t.ChengJi
                        };  //end
                dataGrid6.ItemsSource = q.ToList();
            }
        }
    }
}
 
  • 下面是MainWindow.xaml代码:
<Window x:Class="DatabaseFirstExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ScrollViewer VerticalScrollBarVisibility="Auto">
        <StackPanel>
            <TextBlock Text="Output the information of student which grade >= 60"/>
            <DataGrid Name="dataGrid1" AutoGenerateColumns="True"/>
            <DataGrid Name="dataGrid2" AutoGenerateColumns="True"/>
            <TextBlock Name="txtResult"/>
            <DataGrid Name="dataGrid3" AutoGenerateColumns="True"/>
            <DataGrid Name="dataGrid4" AutoGenerateColumns="True"/>
            <DataGrid Name="dataGrid5"/>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Button Width="100" Margin="10" Content="use LINQ change" Click="btn_Click"/>
                <Button Width="100" Margin="10" Content="use SQL change" Click="btn_Click"/>
            </StackPanel>
            <TextBlock Name="txtInfo"/>
            <TextBlock Text="结果:"/>
            <DataGrid Name="dataGrid6"/>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Button Width="100" Margin="10" Content="添加数据" Click="btn_Click8"/>
                <Button Width="100" Margin="10" Content="删除数据" Click="btn_Click8"/>
            </StackPanel>
        </StackPanel>
        </ScrollViewer>
    </Grid>
</Window>



发布了77 篇原创文章 · 获赞 160 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43763494/article/details/103622723