初学者怎么创建数据库(SQLServer)项目

  本文介绍如何创建带有数据库的程序(系统)方法,适合初学者学习。

1 数据库

1.1 数据库简介

  数据库(DB)是存放数据的仓库,它以文件形式存放于计算机上(区别普通文件是它们由DBMS创建、管理、维护)。数据库管理系统(DBMS)按一定的数据模型(层次模型、网状模型和关系模型)组织数据形成数据库,并对数据库进行管理。DBMS是管理DB软件,通过数据库管理员(DBA)来主导,即
D B A 操 纵 → D B M S 管 理 → D B DBA\underrightarrow{\quad操纵\quad}DBMS\underrightarrow{\quad管理\quad}DB DBA DBMS DB  DB:逻辑上→容器、物理上→若干文件,其组成结构 D B = 1 个 行 数 据 文 件 [ . m d f ] + ( n − 1 ) 个 辅 助 数 据 文 件 [ . n d f ] + n 个 日 志 文 件 [ . l d f ] DB=1个行数据文件[.mdf]+(n-1)个辅助数据文件[.ndf]+n个日志文件[.ldf] DB=1[.mdf]+(n1)[.ndf]+n[.ldf]它们通过文件组进行组织(主行数据文件放在PRIMARY文件组中)。主行数据文件存放定义数据库的信息和数据,日志文件记录操作数据库的过程。而对于FILESTREAM,应用程序借助FILESTREAM可将非结构化数据(文档、图像等)储存在文件系统中,并且保持非结构化数据与对应结构化数据之间的事务一致性。
  实际应用中,数据库一般通过DBMS(计算机上安装的一或多个SQL Server (DBMS) →数据库实例)创建。项目开发前,需先建立数据库,然后基于该DB创建和管理数据表、视图等,并通过数据库对象(表/视图(虚表)/索引/约束/储存过程/触发器/默认值/用户和角色/规则/类型/函数)对DB进行操作和管理。
  流行的DBMS(软件/系统)有,①本地数据库管理系统:Accesss、Visual FoxPro、Paradox;②远程数据库服务器:SQL Server、Oracle、MySQL等。远程数据库服务器在“存储量”、“并发访问”等方面更强!

1.2 数据库如何储存数据

  项目开发前,首先通过数据库管理系统(如SQLServer的管理系统是SQLServer Management Studio(SSMS))创建数据库DB(在计算机物理内存中为1个.mdf文件和1个.ldf文件;在SSMS中为一个树状的分层结构)。然后DB的基本上设计表及其约束,并创建之。最后往数据库的数据表(若干张)中编辑数据(①手动输入—少量数据;②利用SSMS的数据导入接口—批量数据)。

1.3 数据库操纵语言:T-SQL

  T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主要语言(T-SQL语句嵌入应用程序语句中,如T-SQL语句嵌入C#、Java或Python中)。T-SQL 提供标准 SQLDDLDML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。

2 程序(如C#)如何与数据库打交道?

2.1 总体交互简介

  C#程序与数据库打交道主要分为两种模式:①连接式模式(DataReader)、②断开模式(DataSet)。一般说来,ADO.NET工作流程为
连 接 对 象 → 命 令 对 象 → D a t a R e a d e r / D a t a A d a p t e r 执 行 连接对象→命令对象→DataReader/DataAdapter执行 DataReader/DataAdapter其中,连接对象创建:SqlConnection 连接对象=new SqlConnection(”连接字符串”),命令对象创建:SqlCommand 命令对象名=new SqlCommand(“查询字符串”,连接对象名)

2.1.1 连接模式

  ExecuteReader()方法执行CommandText中定义的SQL语句或储存过程,可返回一个DataReader对象(包含了一行、多行数据记录的结果集)。使用DataReader对象的方法可对结果集中的数据进行检索。【DataReader对象是只读的、向前移动的游标;每次只能在内存中保留一行;一直保持与数据库的连接】,其使用方式为SqlDataReader 对象名=命令对象名. ExecuteReader();

2.1.2 断开模式

  DataAdapter连接物理数据表与内存数据表。数据源→内存表:填充Fill(),内存表→数据源:更新Update()。DataAdapter可使用Connection对象连接到数据源,使用Command对象从数据源检索数据,以及将更改回写数据源。适配器创建语法为:SqlDataAdapter 对象名=new SqlDataAdapter(SqlStr,conn);,参数SqlStr为SELECT查询语句或SqlCommand对象,conn为SqlConnection对象。
  DataTable为内存中的一个关系数据库表,可独立创建也可由DataAdapter来填充,声明语法为:DataTable dt=new DataTable();。两种使用情境:①连接数据源、创建适配器对象后,可用其Fill()方法来填充dt,然后再将dt作为数据显示控件(如DataGridView)的数据源。②连接数据源、创建适配器对象后(+适配器画刷),用其Fill()方法来填充dt,再于程序中更改dt(断开连接模式),最后用da.Update(dt)更新至数据源/库。

2.2 DataReadr连接式模式示例

  说明:①connstr为App.config中的连接字符串;②GetData为一个储存过程。

private void button1_Click(object sender, EventArgs e)
        {
            string connstr = ConfigurationManager.ConnectionStrings["myConnString"].ToString();
            //使用using语句可在语句块结束后自动关闭数据库连接
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlCommand cmd = new SqlCommand("GetData", conn);
                cmd.CommandType = CommandType.StoredProcedure; //命令是储存过程
                cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 10)); //@name为储存过程参数-需同名
                cmd.Parameters["@name"].Value = textBox1.Text;
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                if(!dr.HasRows)
                {
                    MessageBox.Show("未找到符合条件的记录", "出错", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                BindingSource bs = new BindingSource();
                bs.DataSource = dr;
                dataGridView1.DataSource = bs;
            }
        }

2.3 DataSet非连接式模式示例

 //(4)添加新用户
        public string AddUser(ArrayList valList)
        {
            string msg;
            try
            {
                SqlDataAdapter sda = new SqlDataAdapter();
                string SelectStr = "SELECT * FROM Admin";  //所有的记录
                sda.SelectCommand = new SqlCommand(SelectStr, conn);
                SqlCommandBuilder scb = new SqlCommandBuilder(sda); //命令画刷
                DataSet ds = new DataSet();
                sda.Fill(ds);
                DataRow newRow = ds.Tables[0].NewRow(); //依“模表”建“行”
                for(int i=0;i<ds.Tables[0].Columns.Count;i++)
                {
                    newRow[i] = valList[i];  //valList每个元素储存“列值”
                }
                ds.Tables[0].Rows.Add(newRow); //内存数据(表)变化
                sda.Update(ds);  //数据适配器一次性更新至数据库
                msg = "用户注册成功!";
            }
            catch(Exception ex)
            {
                msg = ex.Message; //错误信息
            }
            finally
            {
                conn.Close();
            }
            return msg;
        }

3 快速入门书籍推荐

  (1)SQLServer书籍。郑阿奇,等.SQL Server实用教程:SQLServer2014版。
  (2)系统开发书籍(C#版)。①崔淼.C#程序设计(后2章);②龚雄涛.基于C#的SQLServer应用技术;③郭睿智.C#+SQLServer项目开发实践。④曾建华.Visual Studio 2010(C#)Web数据库项目开发。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页

打赏作者

C_xxy

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值