ADO.NET复习总结(6)-断开式数据操作

一、基础知识

主要类及成员(和数据库无关的)
(1)类DataSet:数据集,对应着库,属性Tables表示所有的表
(2)类DataTable:数据表,对应着表,属性Rows表示所有的行
(3)类DataRow:行数据,一个行数组,就对应着一个实体对象
         -》使用DataAdapter的Fill方法,可以将数据填充到DataSet或DataTable中

二、练习:完成学生表的crud

(1)dataGridView的填充:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using t2_StudentInfo;

namespace studentInfo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            string sql = "select * from studentinfo";
            using (SqlConnection conn = new SqlConnection("server=.;database=dbtest;uid=sa;pwd=123"))
            {
                SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
                DataTable table = new DataTable();
                sda.Fill(table);
                dataGridView1.DataSource = table;
            }
        }
    }
}

(2)重新封装SQLhelper

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace t2_StudentInfo
{
    public static partial class SqlHelper
    {
        private static string connStr = ConfigurationManager.ConnectionStrings["dbtest"].ConnectionString;

        public static int ExecuteNonQuery(string sql,params SqlParameter[] ps)
        {
            using (SqlConnection conn=new SqlConnection(connStr))
            {
                SqlCommand cmd=new SqlCommand(sql,conn);
                cmd.Parameters.AddRange(ps);

                conn.Open();
                return cmd.ExecuteNonQuery();
            }
        }

        public static object ExecuteScalar(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn=new SqlConnection(connStr))
            {
                SqlCommand cmd=new SqlCommand(sql,conn);
                cmd.Parameters.AddRange(ps);

                conn.Open();
                return cmd.ExecuteScalar();
            }
        }

        public static DataTable ExecuteTable(string sql,params SqlParameter[] ps)
        {
            using (SqlConnection conn=new SqlConnection(connStr))
            {
                SqlDataAdapter adapter=new SqlDataAdapter(sql,conn);
                //用于进行select操作,可以通过SelectCommand属性获取此操作的SqlCommand对象
                adapter.SelectCommand.Parameters.AddRange(ps);

                DataTable dt=new DataTable();
                adapter.Fill(dt);

                return dt;
            }
        }

        public static SqlDataReader ExecuteReader(string sql,params SqlParameter[] ps)
        {
            SqlConnection conn=new SqlConnection(connStr);
            SqlCommand cmd=new SqlCommand(sql,conn);
            cmd.Parameters.AddRange(ps);

            conn.Open();

            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
    }
}

(3)查询

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using t2_StudentInfo;

namespace studentInfo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {

            //连接查询
            string sql = "select * from StudentInfo inner join ClassInfo on StudentInfo.cid=ClassInfo.cId ";
            DataTable dt = SqlHelper.ExecuteTable(sql);
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = dt;   

        }

        private void dataGridView1_CellFormatting_1(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == 2)
            {
                if (Convert.ToBoolean(e.Value))
                {
                    e.Value = "男";
                }
                else
                {
                    e.Value = "女";
                }
            }
        }

    }
}

(4)

A:列表:

B:列表代码:

private void FormAdd_Load(object sender, EventArgs e)
        {
            string sql = "select * from classinfo";
            DataTable dt = SqlHelper.ExecuteTable(sql);
            cdoClassInfo.DisplayMember = "CTitle";
            cdoClassInfo.ValueMember = "CId";
            cdoClassInfo.DataSource = dt;
        }

C:添加、

 private void button1_Click(object sender, EventArgs e)
        {
            string sql ="";
            if (string.IsNullOrEmpty(label1.Text))
            {
                //添加
                sql = "insert into studentinfo(sname,sgender,sbirthday,cid) values(@name,@gender,@birthday,@cid)";
            }
            else
            {
                //修改
                sql = "update studentinfo set [email protected],[email protected],[email protected],[email protected] where sid=" +label1.Text;
            }

            SqlParameter[] ps =
            {
                new SqlParameter("@name",textBox1.Text),
                new SqlParameter("@gender",radioButton1.Checked),
                new SqlParameter("@birthday",dtpBirthday.Value),
                new SqlParameter("@cid",cboClassInfo.SelectedValue),
            };
            int result=SqlHelper.ExecuteNonQuery(sql, ps);
            if (result > 0)
            {
                FreshForm();
                this.Close();
            }
            else
            {
                MessageBox.Show("保存失败");
            }
        }

D:删除:

 private void removeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("确定要删除吗?", "提示", MessageBoxButtons.OKCancel);
            if (result == DialogResult.Cancel)
            {
                return;
            }
            int sid = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);
            string sql = "update studentinfo set isdelete=1 where sid=" + sid;
            if (SqlHelper.ExecuteNonQuery(sql) > 0)
            {
                LoadList();
            }
            else
            {
                MessageBox.Show("删除失败");
            }
        }

E:修改:

private void editToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);

            FormAdd formAdd=new FormAdd();
            formAdd.FreshForm += LoadList;
            ShowStudent += formAdd.ShowInfo;
            formAdd.Show();

            ShowStudent(id);//发布显示内容的消息
        }

-》事件(广播、消息)的代码实现:
《1》定义委托
《2》在发布消息的类型中定义事件
《3》在接收消息的类型中为事件添加方法

原文地址:https://www.cnblogs.com/mhq-martin/p/8136785.html

时间: 2024-10-10 20:11:47

ADO.NET复习总结(6)-断开式数据操作的相关文章

005.连接式与断开式查询

一.连接式的工作方式: 思路: 1 连接数据源 2 创建命令 3 打开连接 4 执行命令 5 处理执行结果 复习对象: 1 Connection (打开和关闭都要手动完成):DbConnection DbConnection :IDbConnection,IDispiseable(非托管资源) 注意:连接对象是有限的资源,要求必须关闭 常用属性:连接字符串属性 ConnectionString="server=;database=;uid=;pwd="; 要求存储在配置文件:App.c

sql语句复习(基础-提升-技巧-经典数据开发案例-sql server配置)

1 基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'--- 开始 备份BACKUP DATABASE pubs TO testBack 4.说明:创建新表 cre

我的DbHelper数据操作类(转)

其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要"评估"...一评就是几个月...而且,一些公司有的根本就是裸ado.net开发,或者自己封装的数据库操作类非常别扭,很不好用.      这里我给大家共享一个我参照企业库中的数据操作组件编码风格写的数据库操作类,对使用它的程序员来说,编码是很舒服滴(起码我觉得很好撒).以下是代码,很简单的,

从0开始,一起搭框架、做项目(3)公共基础数据操作类 RepositoryBase

索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们写一个基础数据的操作类,如果里面有大家不理解的地方,可采取两种方式,第一:提出来,第二:会用就行.这个类呢我一般不去修改它,因为基础操作类,大家也可以直接拷贝到自己的项目中. 项目准备 我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多

玩转ASP.NET 5:数据操作封装(一)

1.数据操作封装 1.1概述 在习惯使用ADO.NET数据库访问与操作封装,通常写DataHelper/SQLHelper类.到如今ORM大行其道,我们该爱上存储库模式来封装操作.当然,为了顾及初学者,在封装方法时,还是教学方式,一步步地来,最终重构成通用可重用的代码.所以一开始先不用泛型及写一些扩展方法. 1.2新增目录 1.3代码 面向接口编程方式,先定义接口: using BlogASPNET5.Entity.Accounts; using System.Collections.Gener

作业一 统计软件简介与数据操作

spss软件 所属类别 : 软件 SPSS(Statistical Product and Service Solutions),"统计产品与服务解决方案"软件.最初软件全称为"社会科学"(SolutionsStatistical Package for the Social Sciences),但是随着SPSS产品服务领域的扩大和服务深度的增加,SPSS公司已于2000年正式将英文全称更改为"统计产品与服务解决方案",标志着SPSS的战略方向正

郭佳庆(201551296)第一次作业:统计软件简介与数据操作

一.SPSS 1.基本信息 SPSS(Statistical Product and Service Solutions),"统计产品与服务解决方案"软件.最初软件全称为"社会科学软件包"(SolutionsStatistical Package for the Social Sciences),但是随着SPSS产品服务领域的扩大和服务深度的增加,SPSS公司已于2000年正式将英文全称更改为"统计产品与服务解决方案",标志着SPSS的战略方向正

hbase 基本的JavaApi 数据操作及过滤

本文主要是hbase的表操作.数据操作.数据查询过滤等,如果对JDBC或ADO有了解,容易理解HBASE API. hbase版本是2.0. 1.为了方便先贴helper的部分代码(文末git上有完整的测试代码),主要是为了复用Connection. public class HBaseHelper implements Closeable { private Configuration configuration = null; private Connection connection =

计算机系统之汇编---IA32处理器数据格式及数据操作

计算机系统之汇编---IA32处理器数据格式及数据操作 IA32数据格式: Intel用术语"字"表示16位数据类型,因此,称32位数为"双字",称64位数为"四字". Char*这里指的是所有指针类型,注意:c语言新增加的long long是八字节,但是硬件IA32不支持这个类型. 寄存器(8个32位的寄存器,均以%e开头) %eax.%ecx.%edx:调用者保存(数据)寄存器,当过程p调用q,q可以覆盖这些寄存器,但是不会改变p中的数据.