录:
正文:
前言:
对于SQL Server的相关知识我都是在校的时候了解的,毕业到现在可以说完全没有再碰了,所谓三天不练手生,所以关于数据库这一块的知识我可以说完完全全还给老师了(emmmm,对不起我的学费呀),而且最尴尬的是数据库的知识可以说是软件开发一块很重要的东西了,不说特别精通,但是我这种完全还给老师的“人才”可能也是没谁了,所以!为了我曾经的学费,又重新捡起来学一下吧,目前本人供职于C#,所以文中所有的代码联系均为C#语言,另:文中的点都是基础知识复习(就我这水平也暂时别指望从这里看到很高深的技术了o(╯□╰)o)。
SQL Server基础准备
SQL Server:Structured Query Language结构化查询语句。
1.新建数据库
这里我就懒得说什么乱七八糟的定义了,SQL中重要的就是建表,表中重要的就是有主键,差不多就这两个点。然后我现在直接通过数据库建表:
2.在数据库中添加表
然后再表中添加各种信息(在这里我将学生编号设置为主键):
注意:一个表中一定要有一个主键!
Tip:如果你弄好了这个信息,然后关闭了表的界面,突然想起有什么地方不对,想重新进去,那就右键点击你要修改的表名,然后选择“设计”就可以了。
3.向表中添加数据
然后就是给表添加信息了:
选中你刚刚保存的表,然后右键点击,选中“编辑前200行”即可。然后一个劲的往里面写数据就对了。
SQL Server与C#基础准备:
Visual Studio连接数据库方法:
通过在工具中找到“服务器资源管理器”,然后连接数据库,英文:server explore.
在与数据库操作的代码中,我们需要加入using System.Data.SqlClient;
命名空间。
实例解析:
1.C#连接数据
代码:
1 //表示一个到 SQL Server 数据库的打开的连接 2 SqlConnection cn = new SqlConnection("server=(local);database=db_10;Uid=sa;Pwd="); 3 //SQL Server语言,对数据库中表进行操作的语言 4 string cmdtx = ""; 5 //与DataSet使用相关 6 SqlDataAdapter dataAdapter; 7 //内存中的数据库,用于暂存数据库中的数据 8 DataSet dataSet/* = new DataSet()*/;
与数据库相连,首先新建一个SqlConnection实例,等到要连接数据库的时候就用cn.open()来打开数据。
这里补充一下DataSet:
DataSet可以当成是内存中的数据库,他不依赖于数据库而独立的数据集合。
我是这么理解的:从数据库中读出来的数据暂时是保存在DataSet中的,等需要用的时候从DataSet中取出来。
在实际应用中,DadaSet一般有三种使用方法:
- 把数据库中的数据通过DataAdapter对象填充到DataSet中;
- 通过DataAdapter对象操作DataSet实现更新数据库;
- 把XML数据流或者文本加载到DataSet.
2.查询特定列数据
对数据库操作的语句:"SELECT 列名 FROM 表"
代码:
1 //10.01-1 2 private void select_Button_Click(object sender, EventArgs e) 3 { 4 cmdtx = "SELECT 学生编号,学生姓名 FROM Table_1"; 5 //已经打开了在load中 6 //cn.Open(); 7 dataSet = new DataSet(); 8 dataAdapter = new SqlDataAdapter(cmdtx, cn); 9 dataAdapter.Fill(dataSet, "table"); 10 11 showSpecialInfo_dataGridView.DataSource = dataSet.Tables[0].DefaultView; 12 }
Tip:开始的时候只有这么一个功能,我通过cn.Open();
单独打开了数据库的时候没问题,后面因为添加了新的功能我在Load函数中又打开了一次,这个时候在运行就会报错,所以实践证明:只能打开一次数据库。
3.使用列别名
对数据库操作的语句:"SELECT 列名,某一列名 AS 他对应的列别名 FROM 表"
代码:
1 //10.01-2 2 private void changeAlias_button_Click(object sender, EventArgs e) 3 { 4 if (columnName_comboBox.Text == "" || alias_textBox.Text == "") 5 { 6 MessageBox.Show("ColumnName or Alias can't be empty!"); 7 return; 8 } 9 //我去,一个空格坑了我这么久 10 cmdtx = "SELECT " + columnName_comboBox.Text + "," + columnName_comboBox.Text + " AS " + alias_textBox.Text.Trim() + " FROM Table_1"; 11 dataAdapter = new SqlDataAdapter(cmdtx, cn); 12 //如果这里我没有重新实例化一个dataset就会调用之前在内存中的数据 13 dataSet = new DataSet(); 14 dataAdapter.Fill(dataSet, "table"); 15 16 changeAliasName_dataGridView.DataSource = dataSet.Tables[0].DefaultView; 17 }
Tip:这里遇到了两个问题:
- 因为一个空格我被坑到了,在SELECT语句中那里的空格,彼此之间一个都不能少,不然数据库读不出来,就报错了;
- 开始我在运用DataSet的时候,我没有重新实例化一个,搞不懂为什么显示的数据总是不对,后来尝试出来才发现要是不重新实例化DataSet,那么他就一直调用原来的数据。
4.在列上加入计算
对数据库操作的语句: SELECT 列名,(A列+B列) AS 新的列 FROM 表"
代码:
1 //10.01-3 2 private void finalScore_button_Click(object sender, EventArgs e) 3 { 4 cmdtx = "SELECT 学生编号,马克思成绩,高数成绩,(马克思成绩+高数成绩) AS 总成绩 FROM Table_3"; 5 dataAdapter = new SqlDataAdapter(cmdtx, cn); 6 dataSet = new DataSet(); 7 dataAdapter.Fill(dataSet, "table"); 8 Sum_dataGridView.DataSource = dataSet.Tables[0].DefaultView; 9 }
5.使用比较设置条件
对数据库操作的语句:"SELECT 列名 FROM 表 WHERE 限制条件"
代码:
1 //10.01-4 2 private void scoreLine_button_Click(object sender, EventArgs e) 3 { 4 if (line_comboBox.Text == "" || scoreLine_textBox.Text == "") 5 { 6 MessageBox.Show("Score can't be empty!"); 7 return; 8 } 9 dataSet = new DataSet(); 10 cmdtx = "SELECT * FROM Table_3 WHERE "+line_comboBox.Text+">"+scoreLine_textBox.Text; 11 dataAdapter = new SqlDataAdapter(cmdtx, cn); 12 dataAdapter.Fill(dataSet, "table"); 13 14 line_dataGridView.DataSource = dataSet.Tables[0].DefaultView; 15 }