2021-05-26

C#EntityFramework 对SQL数据库进行增删改操作(稍微有点基础就可以看懂,按这个写出来,每一步很详细,所有需要的代码都贴出来了)

使用EntityFramework访问数据库可以减少以前搭建三层架构书写代码的工作量,减轻开发的时间。

数据表的设计

这里给的图就不一一描述字段意思了

表字段
表数据

创建Web项目(.NET Framework)

添加实体数据模型

项目创建好之后,右键项目找到 > 添加 > 新建项目 >  Visual C# 数据选项 >ADO.NET 实体数据模型 > 添加 >下一步(这里就用第一个模型)


选择模型

下一步就到了这里需要点击 新建连接

建立连接

点击 新建连接之后 填写好这些地方记得保存密码,不然后期会登录"sa"失败,以及后面不引入程序集 System.Data.Linq 也会出现登录"sa"失败

填写连接条件

确定之后 随便勾选是否,下一步

筛选数据

选择数据源,把这个选项构上

选择数据

完成之后,项目引入程序集。

点击项目的 >引用 >程序集 > 搜索 linq >在列表中勾选 System.Data.Linq >确定

现在只差代码了!

前端代码:

<body>

    <form id="form1" runat="server">

            <div style="display:flex;">

                <asp:HiddenField ID="HiddenField1" runat="server" />

                <table border="1">

                <tr>

                    <th>标题</th>

                    <th>作者</th>

                    <th>内容</th>

                    <th>类型</th>

                    <th>操作</th>

                </tr>

            <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">

                <ItemTemplate>

                    <tr>

                    <th><%# Eval("title") %></th>

                    <th><%# Eval("author") %></th>

                    <th><%# Eval("content") %></th>

                    <th><%# Eval("catrlogid") %></th>

                    <th>

                        <asp:LinkButton ID="LinkButton1" runat="server" CommandName="del" CommandArgument='<%# Eval("title") %>'>删除</asp:LinkButton>

                        <asp:LinkButton ID="LinkButton2" runat="server" CommandName="update" CommandArgument='<%# Eval("id") %>'>修改</asp:LinkButton>

                    </th>

                </tr>


                </ItemTemplate>

            </asp:Repeater>

            </table>


        <div style="width:500px;height:500px;display:flex;margin-left:5%;">

        <div>

            <asp:Label ID="Label1" runat="server" Text="标题"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />

            <asp:Label ID="Label2" runat="server" Text="作者"></asp:Label><asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />

            <asp:Label ID="Label3" runat="server" Text="内容"></asp:Label><asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /> 

            <asp:Label ID="Label4" runat="server" Text="类型"></asp:Label><asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList><br />

            <asp:Button ID="Button1" runat="server" Text="添加" OnClick="Button1_Click" />

          </div>

        <div style="margin-left:5%;">

            <asp:Label ID="Label5" runat="server" Text="标题"></asp:Label><asp:TextBox ID="TextBox4" runat="server"></asp:TextBox><br />

            <asp:Label ID="Label6" runat="server" Text="作者"></asp:Label><asp:TextBox ID="TextBox5" runat="server"></asp:TextBox><br />

            <asp:Label ID="Label7" runat="server" Text="内容"></asp:Label><asp:TextBox ID="TextBox6" runat="server"></asp:TextBox><br /> 

            <asp:Label ID="Label8" runat="server" Text="类型"></asp:Label><asp:DropDownList ID="DropDownList2" runat="server" ></asp:DropDownList><br />

            <asp:Button ID="Button2" runat="server" Text="修改" OnClick="Button2_Click"/>

          </div>

          </div>


        </div>

    </form>

</body>

前端代码生成界面:

前端界面

后端代码:

//Web窗体类后面的所有代码

MyDBEntities2 db = new MyDBEntities2();//引用实体模型,这里是连接建好以后筛选数据下面文本框得命名 数据库名+Entities(第一个),后面第二个就是Entities2 以此类推

// 是注释

        protected void Page_Load(object sender, EventArgs e)

        {

            //回发

            if (!IsPostBack)

            {

                Data();

                DropData();

            }

        }

        //数据显示

        public void Data()

        {

            //LINQ查询数据语句

            var data = from c in db.Catelog

                      join a in db.Article on c.id equals a.catrlogid

                      select new

                      {

                          id = a.id,

                          title = a.title,

                          author = a.author,

                          content = a.content,

                          catrlogid = c.name

                      };

            Repeater1.DataSource = data.ToList();//绑定数据源,ToList()把数据转换为 list集合

            Repeater1.DataBind();//显示绑定的数据

        }

        //下拉框数据

        public void DropData()

        {

            var dataDrop = from c in db.Catelog

                          select new

                          {

                              id = c.id,

                              name = c.name

                          }

                      ;

            DropDownList1.DataSource = dataDrop.ToList();//绑定数据源,ToList()把数据转换为 list集合

            DropDownList1.DataTextField = "name";//列表项可见部分文本

            DropDownList1.DataValueField = "id";//列表项的值部分

            DropDownList1.DataBind();//显示绑定的数据

        }

        protected void Button1_Click(object sender, EventArgs e)

        {

            if (TextBox1.Text == "" || TextBox2.Text == "" || TextBox3.Text == "")

            {

                Response.Write("<script>alert('请输入完整')</script>");

                return;

            }

            else

            {

                var data = from a in db.Article

                          where a.title == TextBox1.Text

                          select a.title;

                foreach (var item in data)

                {

                    if (item == TextBox1.Text)

                    {

                        Response.Write("<script>alert('已存在,请输入其他标题')</script>");

                        return;

                    }

                    else

                    {

                        break;

                    }

                }

                int cid = int.Parse(DropDownList1.SelectedValue);//获取到选定项的值  DropDownList1.DataValueField = "id";列表项的值部分

                Article ar = new Article(TextBox1.Text, TextBox2.Text, TextBox3.Text, cid);//创建对象保存需要添加到数据库的值

                db.Article.Add(ar);

                if (db.SaveChanges() > 0)

                {

                    Response.Write("<script>alert('添加成功')</script>");

                    TextBox1.Text = "";//清空文本框

                    TextBox2.Text = "";//清空文本框

                    TextBox3.Text = "";//清空文本框

                    Data();//调用数据显示方法重新显示

                    DropData();//调用下拉框数据方法

                }

            }

        }

        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)

        {

            if (e.CommandName == "del")

            {

                string title = e.CommandArgument.ToString();//获取删除所需标题,ID也可以

                db.Article.Remove(db.Article.FirstOrDefault(n => n.title == title));

                if (db.SaveChanges() > 0)

                {

                    Response.Write("<script>alert('删除成功')</script>");

                    Data();

                    DropData();

                }

            }

            if (e.CommandName == "update")

            {

                aid = int.Parse(e.CommandArgument.ToString());//获取修改所需ID

                HiddenField1.Value = aid.ToString();//给隐藏控件的赋值

                var data = from a in db.Article

                          where a.id == aid

                          select a;

                foreach (var item in data.ToList())

                {

                    TextBox4.Text = item.title;

                    TextBox5.Text = item.author;

                    TextBox6.Text = item.content;

                    int id = (int)item.catrlogid;

                    //DropDownList1.Text = item.catrlogid;

                    DropData(id);

                    DropDownList2.Items[id - 1].Selected = true;//选中传过来的下拉框类型名

                }

            }

        }

        public int aid;//全局变量接受修改作者ID

        public void DropData(int id)

        {

            var dataDrop = from c in db.Catelog

                          select new

                          {

                              newid = c.id,

                              name = c.name

                          };

            ;

            DropDownList2.DataSource = dataDrop.ToList();

            DropDownList2.DataTextField = "name";

            DropDownList2.DataValueField = "newid";

            DropDownList2.DataBind();

        }

        protected void Button2_Click(object sender, EventArgs e)

        {

            if (TextBox4.Text == "" || TextBox5.Text == "" || TextBox6.Text == "")

            {

                Response.Write("<script>alert('请输入完整')</script>");

                return;

            }

            else

            {

                    if (HiddenField1.Value == "")

                    {

                        Response.Write("<script>alert('没找到修改的数据源')</script>");

                        return;

                    }

                    else

                    {

                    int hidden = int.Parse(HiddenField1.Value);

                    var updateData = db.Article.FirstOrDefault(n => n.id == hidden);

                        updateData.title = TextBox4.Text;

                        updateData.author = TextBox5.Text;

                        updateData.content = TextBox6.Text;

                        updateData.catrlogid = int.Parse(DropDownList2.SelectedValue);

                        int count = db.SaveChanges();//入库返回值

                        if (count > 0)

                        {

                            Response.Write("<script>alert('修改成功')</script>");

                            TextBox4.Text = "";

                            TextBox5.Text = "";

                            TextBox6.Text = "";

                            Data();

                        }

                    }

            }

        }

后端功能:

所有数据显示

删除前的数据

删除

删除成功图

删除后的数据

删除后的数据

添加和修改的输入完整


输入完整

添加标题相同提示

主要是查重

标题存在

没点修改会找不到用户

修改找不到数据源

代码关键部分有注释,以上就是用EF对数据库的增删改操作。

第一次写博客,没经验,欢迎留言讨论。

联系QQ:2976258702

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridVi...
    悦居东篱阅读 2,723评论 0 1
  • 1. 打开新的窗口并传送参数: 传送参数: response.write("window.open('*.aspx...
    682c63a21d97阅读 720评论 0 0
  • 答案,正式使用前请祛除答案以及选项的红色颜色! 1:C2:C3:D4:D5:B 6:B7:D8:B9:A10:D ...
    程序媛_阅读 463评论 0 0
  • 面试题 一、语言 集合 Listhttps://www.imooc.com/article/306526[http...
    Ernest_Chou阅读 232评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 125,165评论 2 7