# 阶段技术汇总
### 1.开发设计内容
开发语言、构图、数据持久技术、前端技术
### 2.开发技术线准备
开发语言
强语言:java、c#
数据持久:DB、ADO.net
前端技术:HTML、CSS
### 3.开发学习
- 语言:
- HelloWorld
- 语法结构、数据类型(基本数据类型、引用数据类型)
- 结构化语法:顺序、分支、循环
- 面向对象基础:封装(类封装属性、方法)、继承、多态
- 数据库技术
- 管理系统操作
- 库的操作
- 表的操作:
- 数据操作:
- 增:insert
增加一条记录、多条记录
- 改:update
字段——数据类型对应
- 删:delete
删部分数据
删全部数据(仅数据保留标识信息、重置结构)
- 查:select
精准查询:where
模糊查询:like、between…and、in
分组查询:group by
分组条件:having
排序:order by
多表联合查询:内联、左联、右联、全联
子查询:子查询结果是父查询的条件
- 前端技术:
- 标签技术:HTML
<tag [attr="value"[,attr="value",...]
- 样式技术:CSS
选择器:基本、高级(层次、属性、结构伪类等)
盒子模型、浮动、定位、动画等
----
### 核心代码:
#### Java、C#
```java
//最(大、小)值
int []nums=new int[4];
int max = nums[0];
for (int i = 0; i<nums.length; i++) {
if (nums[i] > max) {
max = nums[i];
}
}
//此时max为最大值
int min = nums[0];
for (int i = 0; i<nums.length; i++) {
if (min>nums[i]) {
min = nums[i];
}
}
//此时min为最小值
//总和及平均数
int []nums=new int[4];
给nums数组赋值
int sum=0;//总和
for (int i = 0; i <nums.length ; i++) {
sum+=nums[i];
}
double avg=sum/nums.length;//平均数
//循环嵌套
int sum=0;
for (int i = 0; i <3 ; i++) {
sum=0;
System.out.println("请输入第"+(i+1)+"个班的成绩:");
for (int j = 0; j <4 ; j++) {
System.out.print("请输入第"+(j+1)+"位同学成绩:");
test=input.nextInt();
sum+=test;
}
//循环录入三个班 每个班四个同学的成绩 并给出该班的总分
//冒泡排序(此处为降序 升序将if中"<"改为">")
for (int i = 0; i < num.length - 1; i++) {
for (int j = 0; j < num.length - 1 - i; j++) {
if (num[j] < num[j + 1]) {
temp = num[j + 1];
num[j + 1] = num[j];
num[j] = temp;
}
}
}
//字符串操作
String
字符串1.equals(字符串2) 比较两个字符串的值是否相同
字符串1==字符串2 判断是否为一个字符串对象
字符串1.equalsIgnoreCase(字符串2) 忽略大小写比较两个字符串的值
字符串.toLowerCase() 小写 字符串.toUpperCase() 大写
字符串1.concat(字符串2) 字符串2连接到字符串1后
字符串1.indexOf(字符串2) 字符串1中 字符串2的位置 (int)
字符串1.lastIndexOf(字符串2) 字符串1中 最后出现字符串2的位置 (int)
字符串.substring(1) 返回当前字符串括号中数字后面的字符串 (String)
字符串.substring(1,5) 返回当前字符串括号中第一个数字到第二个数字间的字符串 (第一个数字从0开始,第二个数字从1开始) (String) 字符串.Trim() 去掉字符串前后的空格
字符串.split(字符串,数字) 括号内的字符串和数字都是可选项 字符串表示按什么来拆分 数字用来限制返回数组中的元素个数
StringBuffer
字符串.toString() 将StringBuffer转换为String类型
字符串1.append(字符串2) 将字符串2连接到字符串1后
字符串.insert(数字,字符串) 将括号内的字符串插入到调用该方法的字符串的 指定位置(括号内数字)
//-------------------
//类的声明及应用
1.创建一个类 写入该类的属性和方法
2.需要该类的时候 声明一个该类的对象 : 类名 方法名 = new 类名();
```
#### 前端技术
```html
<!-- 表单验证 -->
表单
表单中主要包括下列元素:
button——普通按钮
radio ——单选按钮
checkbox——复选框
select ——下拉式菜单
text ——单行文本框
textarea——多行文本框
submit——提交按钮
reset—— 重填按钮
用HTML设计表单常用的标记是:<form>、< input>、<Option>、<Select>、<textarea>和<isindex>等标记
1.<form>表单标记
该标记的主要作用是设定表单的起止位置,并指定处理表单数据程序的url地址。其基本语法结构如下:
<form action=url method=get|post name=value onreset=function onsubmit=function target=window>
</form>
其中action:用于设定处理表单数据程序url的地址。这样的程序通常是CGI应用程序,采用电子邮件方式时,用action="mailto:你的邮件地址"。
method:指定数据传送到服务器的方式。有两种主要的方式,当method=get时,将输入数据加在action指定的地址后面传送到服务器;当 method=post时则将输入数据按照HTTP传输协议中的post传输方式传送到服务器,用电子邮件接收用户信息采用这种方式。
name:用于设定表单的名称。onrest和onsubmit是主要针对“reset”按钮和“submit”按钮来说的,分别设定了在按下相应的按钮之后要执行的子程序。
target:指定输入数据结果显示在那个窗口,这需要与<frame>标记配合使用。
2、<input>表单输入标记
此标记在表单中使用频繁,大部分表单内容需要用到此标记语法如下:
<inPut
aligh=left|righ|top|middle|bottom
name=value
type=text|textarea|password|checkbox|radio|submit|reset|file|hidden|image|button
value=value
src=url
checked
maxlength=n
size=n
onclick=function
onselect=function>
align:是用于设定表单的位置是靠左(left)、靠右(right)、居中(middle)、靠上 top)还是靠底(bottom)。
name:设定当前变量名称。
type:决定了输入数据的类型。其选项较多,各项的意义是:
type=text:表示输入单行文本;
typet=textarea:表示输入多行文本;
type=password:表示输入数据为密码,用星号表示;
type-checkbox:表示复选框;
type-radio:表示单选框;
type一submit:表示提交按钮,数据将被送到服务器;
tyPe-reset:表示清除表单数据,以便重新输入;
type-file:表示插入一个文件;
type-hidden:表示隐藏按钮;
type=image:表示插入一个图像;
type一button:表示普通按钮;
value:用于设定输入默认值,即如果用户不输入的话,就采用此默认值;
src:是针对type=image的情况来说的,设定图像文件的地址;
checked:表示选择框中,此项被默认选中;
maxlength:表示在输入单行文本的时候,最大输入字符个数;
size:用于设定在输入多行文本时的最大输入字符数,采用width,height方式;
onclick:表示在按下输入时调用指定的子程序;
onselect:表示当前项被选择时调用指定的子程序。
3、<select>下拉菜单标记
用<select>标记可以在表间中插入一个下拉菜单,它需与<option>标记联用,因为下拉菜单中的每个选项要用<option>标记来定义。<select>标记的语法如下:
<select
name=nametext
size=n
multiple>
其中name:设定下拉式菜单的名称;
size:设定菜单框的高度,也就是一次显示几个菜单项,一般取默认值(size="1");
multiple:设定为可以进行多选。
4、<option>选项标记
该标记为下拉菜单中一个选项,语法很简单:
<option selectedvalue=value>
其中selected:表示当前项被默认选中;
value:表示该项对应的值,在该项被中之后,该项的值就会被送到服务器进行处理。
5、<textarea>多行文本输入标记
这是一个建立多行文本输入框的专用标记,其语法如下:
<textarea
name=name
cols=n
rows=n
wrap=off|hard|soft>
各参数含义:name:文本框名称;clos:宽度;rows:高度(行数);wrap:换行控制,off:不自动换行;hard:自动硬回车换行,换行标记一同被传送到服务器中去;soft:自动软回车换行,换行标记不会传送到服务器中去。
表单所涉及的标记较多,参数也较复杂,而实际制作表单时就是这些标记的组合应用,但一般的表单不可能涉及所有参数,能用默认值的尽量用默认值
<!-- 页面布局:盒子、浮动、定位 -->
一、盒子模型
1、盒子模型组成
CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和实际内容。
2、边框(border)
border可以设置元素的边框。边框有三部分组成:边框宽度(粗细)、边框样式、边框颜色。
边框会影响盒子的实际大小。
/* 边框语法 */
border : border-width || border-style || border-color
/* 边框简写-无顺序 */
border: 1px solid red;
/* 边框分开写 */
border-top: 1px solid red;
/* border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框(是否合并) */
border-collapse: collapse;
```
| 属性 | 作用 | 值 |
| :----------- | -------- | :----------------------------------------------------------- |
| border-width | 边框粗细 | 单位px |
| border-style | 边框样式 | none:没有边框(默认) solid:单实线 dashed:虚线 dotted:点线 |
| border-color | 边框颜色 | 颜色值 |
```html
3、内边距(padding)
如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子;如果盒子本身没有指定width / height属性,则此时padding不会撑开盒子大小。
值的个数:[1]上下左右;[2]上下,左右;[3]上,左右,下;[4]上,右,下,左(顺时针)。
4、外边距(margin)
4.1 基础语法
与边框、内边距类似
/* 让块级盒子水平居中 */
.header{ width: 960px; margin: 0 auto;}
4.2 外边距合并问题
(1)相邻块元素垂直外边距的合并
当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有 上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的 较大者这种现象被称为相邻块元素垂直外边距的合并。
(2)嵌套块元素垂直外边距的塌陷
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
4.3 清除内外边距
* {
padding:0; /* 清除内边距 */
margin:0; /* 清除外边距 */
}
5、CSS3新增样式
5.1 圆角边框
border-radius 属性用于设置元素的外边框圆角。
参数值可以为 数值 或 百分比 的形式(值是圆的半径)。如果是 正方形 ,想要设置为一个圆,把数值修改为 高度或者宽度的一半 即可,或者直接写为 50%。
分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和
border-bottom-left-radiu。该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角。
border-radius: length;
border-radius: 1px 2px 3px 4px;
5.2 盒子阴影
box-shadow: h-shadow v-shadow blur spread color inset;
```
| 值 | 描述 |
| -------- | -------------------------------------- |
| h-shadow | 必需。水平阴影的位置。允许负值 |
| v-shadow | 必需。垂直阴影的位置。允许负值 |
| blur | 可选。模糊的距离 |
| spread | 可选。阴影的尺寸 |
| color | 可选。阴影的颜色。css的颜色值 |
| inset | 可选。将外部阴影(outset)改为内部阴影 |
```
5.3 文字阴影(了解,用的不多)
text-shadow: h-shadow v-shadow blur color;
```
| 值 | 描述 |
| -------- | ------------------------------ |
| h-shadow | 必需。水平阴影的位置。允许负值 |
| v-shadow | 必需。垂直阴影的位置。允许负值 |
| blur | 可选。模糊的距离 |
| spread | 可选。阴影的尺寸 |
| color | 可选。阴影的颜色。css的颜色值 |
```html
二、浮动
1、理解浮动
(1)传统网页布局的三种方式(盒子如何进行排列顺序)?
答:①标准流(按照规定好的默认顺序排列)。②浮动。③定位。
(2)为什么需要浮动?
答:可以让多个块级元素在一行内排列显示。
[ 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动 ]
[ 网页布局第二准则:先设置盒子大小,再设置盒子位置 ]
(3)浮动的特性?【重要!】
答:①浮动元素会脱离标准流的控制移动到指定位置(脱标)--> 浮动不占位置。
②浮动的元素会具有行内块元素的特性。
a. 块级盒子没有设置宽度默认和父级一样宽。添加浮动后,大小由内容决定。
b. 浮动的盒子中间是没有缝隙的,紧挨在一起。
(4)多个盒子设置浮动?
答:多个盒子按照属性值一行内显示并且顶端对齐排列,如果父级宽度装不下,则另起一行对齐。
2、 浮动语法
选择器 { float: 属性值; }
/* none:不浮动(默认值) */
/* left:元素向左浮动 */
/* right:元素向右浮动 */
3、浮动元素和标准流父级搭配使用
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。(对浮动约束)
一个元素浮动了,理论上其他的兄弟元素也要浮动。
浮动的盒子只会影响盒子后面的标准流(原因是浮动不占位置),不会影响前面的标准流。
4、消除浮动
4.1 对于消除浮动的理解
① 为什么需要消除浮动?
答:因为父盒子在很多情况下,不方面给高度(比如说文本的长度不确定,产品的数量不确定)。但是子盒子浮动又不占位置,导致父级盒子高度为0,影响下面的标准流盒子。总结就是:父级没高度,子盒子浮动影响下面布局。
② 消除浮动的本质是?
答:消除浮动后,父级会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流。
③ 消除浮动的策略是?
答:闭合浮动。只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子。
4.2 消除浮动语法
选择器 { clear: 属性值; }
/* left:消除左侧浮动元素的影响 */
/* right:消除右侧浮动元素的影响 */
/* both:同时清除左右两侧浮动的影响(最常用) */
4.3 消除浮动的方法
(1)额外标签法(隔墙法)
使用:在浮动元素末尾添加一个空的标签,例如<div style=”clear:both”></div>,这个空标签必须是块级元素
(2)父级添加overflow属性
使用:可以给父级添加overflow属性,将其属性值设置为hidden、auto或scroll。
(3)父级添加after伪元素
/* 感觉添加伪元素就像是写好了一个函数,需要的时候进行调用就行 */
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix { /* IE6、7 专有 */
*zoom: 1;
}
(4) 父级添加双伪元素
.clearfix:before,.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}
三、定位
1、理解定位
(1)为什么需要定位?
答:定位可以让盒子自由的在某个盒子内移动位置或者固定屏幕中的某个位置,并且可以压住其他盒子。
(2)子绝父相:子级是绝对定位的话,父级要用相对定位(重要!!!)
答:①子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。②父盒子需要加定位限制子盒子在父盒子内显示。③父盒子布局时,需要占有位置,因此父亲只能是相对定位。总结:因为父级需要占有位置,因此是相对定位, 子盒子不需要占有位置,则是绝对定位。
(3)定位有什么特殊特性?
答:绝对定位和固定定位也和浮动类似。①行内元素添加绝对或者固定定位,可以直接设置高度和宽度。②块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。
(4)脱标的盒子(浮动、绝对定位、相对定位)不会触发外边距塌陷。
(5)绝对定位、固定定位会完全压住盒子(与浮动的不同)。
答:浮动元素只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)。但是绝对定位(固定定位) 会压住下面标准流所有的内容。
2、定位组成
2.1 定位模式 + 边偏移
定位 = 定位模式 + 边偏移
定位模式决定元素的定位方式 ,它通过 CSS 的 position 属性来设置。
```
| position属性 | **语义** | 是否脱标 | 相对移动位置 |
| ------------ | ---------------- | -------------- | ------------------ |
| static | 静态语义(了解) | 否 | 相对移动位置 |
| **relative** | 相对定位(重要) | 否(占有位置) | 相对于自身位置移动 |
| **absolute** | 绝对定位(重要 | 是(不占位置) | 相对定位的父级移动 |
| **fixed** | 固定定位(重要) | 是(不占位置) | 相对浏览器可视区 |
| sticky | 粘性定位(了解) | 否(占有位置) | 相对浏览器可视区 |
```html
边偏移则决定了该元素的最终位置,有 top、bottom、left 、right 4 个属性。
2.2 静态定位 static(了解)
静态定位就是元素的默认定位方式,相当于无定位,按照标准流摆放位置。
选择器 { position: static; }
2.3 相对定位 relative(重要)
相对定位是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。
原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。
相对定位并没有脱标。它最典型的应用是给绝对定位当父亲(子绝父相)。
选择器 { position: relative; }
2.4 绝对定位 absolute(重要)
绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的。
如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document 文档)。如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
绝对定位不再占有原先的位置(脱标)。
选择器 { position: absolute; }
/* 绝对定位的盒子居中(注意:此时无法通过 margin: 0 auto 实现水平居中) */
/* 1、让盒子的左侧移动到父级元素的水平中心位置 */
left: 50%;
/* 2、让盒子向左移动自身宽度的一半(注意:向左移动时要加负号) */
margin-left: -100px;
2.5 固定定位 fixed(重要)
固定定位以浏览器的可视窗口为参考点移动元素。①和父元素无关。②不随滚动条滚动。
固定定位不占有原先的位置(脱标)。
选择器 { position: fixed; }
/* 固定定位小技巧:固定在版心右侧位置 */
/* 1、走到浏览器可视区的一半位置 */
left: 50%;
/* 2、移动版心宽度的一半距离 */
margin-left: 100px;
2.6 粘性定位 sticky(了解)
以浏览器的可视窗口为参照点移动元素(固定定位特点)。
粘性定位 占有原先的位置 (相对定位特点)。
必须添加 top 、left、right、bottom 其中一个才有效。
和页面滚动搭配使用。应用场景为:当往上滚动到一定程度后不再滚动。
四、元素的显示与隐藏
本质:让一个元素在页面中隐藏或显示出来。
三种显示隐藏:display 显示隐藏、visibility 显示隐藏、overflow 溢出显示隐藏。
1、display 显示隐藏
display 属性用于设置一个元素应如何显示。隐藏元素后,不再占有原来的位置。
```
| **属性** | **语义** |
| :--------------: | :------: |
| display: none ; | 隐藏对象 |
| display:block ; | 显示元素 |
```
2、visibility 显示隐藏
visibility 属性用于让一个元素应可见还是隐藏。隐藏元素后继续占有位置。
```
| **属性** | **语义** |
| :-------------------: | :------: |
| visibility:visible ; | 元素可视 |
| display:block; | 元素隐藏 |
```
3、overflow 溢出显示隐藏
overflow 属性只是对溢出的部分进行处理。
```
| **属性** | auto |
| :------: | :------------------------------------: |
| visible | 不剪切内容也不添加滚动条(默认) |
| hidden | 不显示超过对象尺寸的内容,超出部分隐藏 |
| scroll | 不管内容是否超出,总是显示滚动条 |
| auto | 超出自动显示滚动条,不超出不显示滚动条 |
#### 数据库技术
```sql
->创建数据库(Create Database)
create database mydb10
删除数据库
drop database mydb10
删除表
delete from dbo.表名
--增
插入操作
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3)
插入自增长数据
use mydb1
go
insert into dbo.Employee(EmpName,EmpAge,DelFlag) values(N'小老',22,1)
插入日期
--插入日期
use mydb1
go
insert into dbo.UserInfo(username,birthday) values('ssx',GETDATE())
--改
更新数据
update dbo.UserInfo set username='abcdef' where uid=8
--删
删除表
delete from dbo.表名
删除表中一行数据
delete from 表名
where id=表
--查
1.辅助查询
select * from GoodInfo where id<5 and cid<>4
2.区间查询 and
select * from GoodInfo where id>4 and cid>4
3.区间查询 between and
select * from GoodInfo where id between 3 and 6
4.模糊查询
select * from GoodInfo where gname like 'Redmi%'
5.IN查询
select * from student where id in (1,5,7)
6.子查询
select * from student where chinese=(select max(chinese) from student)
8.日期函数
给某个日期增加一天
DATEADD(单位,个数,日期)
select DATEADD(day,1,'2021-12-08')
查看日期相差的秒数
select DATEDIFF(SECOND, '2021-12-08', '2021-12-09')
求月份的差集
select DATEDIFF(MONTH, '2021-10-08', '2021-12-09')
9.字符串函数
select LOWER(NAME) from student
去除左边空格
select LTRIM(' abc ')
# 11.oracle多表关联查询和子查询
create table StudentInfo
(
sid int,
sname nvarchar(6),
sage int);
内连接(inner join……on/join on):只连接匹配的行
select * from StudentInfo s inner join CourseInfo c on s.sid=c.sid;
左连接(left join……on):包含左边表的全部行,不管右边表的是否存在与它们匹配的行
select * from StudentInfo s left join CourseInfo c on s.sid=c.sid;
右连接(right join……on):包含右边表的全部行,不管左边表是否存在与它们匹配的行
select * from StudentInfo s left join CourseInfo c on s.sid=c.sid;
嗯:
[文件]
```
#### ADO.net技术
```C#
//数据库连接
引用命名空间
using System.Data;
using System.Data.SqlClient;
/*
* 使用时修改
* 1.namespace 后命名空间
* 2.修改数据库名
* 3.根据自己的数据库登录不同,使用各自用户名和密码
*/
namespace FrmSuperMark
{
public class DBHelper
{
创建链接字符串
private string strConn = "Data Source=.;Initial Catalog=SuperMark;User ID=sa;pwd=bdqn";//此行改三处信息
创建链接
private SqlConnection conn;
填入字符串
public SqlConnection Connection
{
get
{
if (conn == null)
{
conn = new SqlConnection(strConn);
}
return conn;
}
}
创建打开数据库方法
public void OpenConnection()
{
if (Connection.State==ConnectionState.Closed)
{
Connection.Open();
}
else if (Connection.State==ConnectionState.Broken)
{
Connection.Close();
Connection.Open();
}
}
创建关闭数据库方法
public void CloseConnection()
{
if (Connection.State==ConnectionState.Open||Connection.State==ConnectionState.Broken)
{
Connection.Close();
}
}
}
}
//数据操作:增删改
增:
引用命名空间
using System.Data;
using System.Data.SqlClient;
1.调用DBHelper
DBHelper helper = new DBHelper();
2.打开数据库
helper.OpenConnection();
3.创建sql语句
string sql = string.Format(@"INSERT INTO [表名] ([列名]) VALUES (<数据>)");
4.再传入SQL语句和参数 传入俩个参数: 1 一个sql语句 2打开连接的参数
SqlCommand comm = new SqlCommand(sql, helper.Connection);
5.获取影响行数判断是否添加成功
int iRet = comm.ExecuteNonQuery();
if (iRet > 0)
{
MessageBox.Show("添加成功!","系统提示",MessageBoxButtons.OK);
}
else
{
MessageBox.Show("添加失败!", "系统提示", MessageBoxButtons.OK);
}
6.关闭数据库
helper.CloseConnection();
删:
引用命名空间
using System.Data;
using System.Data.SqlClient;
1.调用DBHelper
DBHelper helper = new DBHelper();
2.打开数据库
helper.OpenConnection();
3.创建sql语句
string sql = string.Format(@"DELETE FROM [表名] WHERE <搜索条件,,>");
4.再传入SQL语句和参数 传入俩个参数: 1 一个sql语句 2打开连接的参数
SqlCommand comm = new SqlCommand(sql, helper.Connection);
5.获取影响行数判断是否删除成功
int iRet = comm.ExecuteNonQuery();
if (iRet > 0)
{
MessageBox.Show("删除成功!","系统提示",MessageBoxButtons.OK);
}
else
{
MessageBox.Show("删除失败!", "系统提示", MessageBoxButtons.OK);
}
6.关闭数据库
helper.CloseConnection();
改:
引用命名空间
using System.Data;
using System.Data.SqlClient;
1.调用DBHelper
DBHelper helper = new DBHelper();
2.打开数据库
helper.OpenConnection();
3.创建sql语句
string sql = string.Format(@"UPDATE [表名] SET [要修改的列]=<要修改的数据> WHERE <搜索条件,,>");
4.再传入SQL语句和参数 传入俩个参数: 1 一个sql语句 2打开连接的参数
SqlCommand comm = new SqlCommand(sql, helper.Connection);
5.获取影响行数判断是否修改成功
int iRet = comm.ExecuteNonQuery();
if (iRet > 0)
{
MessageBox.Show("修改成功!","系统提示",MessageBoxButtons.OK);
}
else
{
MessageBox.Show("修改失败!", "系统提示", MessageBoxButtons.OK);
}
6.关闭数据库
helper.CloseConnection();
//数据操作:查询
1.调用DBHelper
DBHelper helper = new DBHelper();
2.打开数据库
helper.OpenConnection();
3.创建sql语句
string sql = string.Format(@"SELECT [要查询的列] FROM [表名] WHERE <搜索条件,,>");
4.再传入SQL语句和参数 传入俩个参数: 1 一个sql语句 2打开连接的参数
SqlCommand comm = new SqlCommand(sql, helper.Connection);
5.关闭数据库
helper.CloseConnection();
```
#### 窗体部分:
```C#
//DBHelper(保留一份)
using System.Data.SqlClient;
using System.Data;
//先引用以上两个命名空间
namespace SuperMarket -->命名空间名
{
class DBHelper
{
private String connString = "Data Source=.;Initial Catalog=SuperMarket;User ID=sa;pwd=1234";
//Data Source=服务器名称 Initial Catalog=数据库名 User ID=登录名 pwd=密码
private SqlConnection connection;
public SqlConnection Connection
{
get
{
if (connection == null)
{
connection = new SqlConnection(connString);
}
return connection;
}
}
public void OpenConnection()
{
if (Connection.State == ConnectionState.Closed)
{
Connection.Open();
}
else if (Connection.State == ConnectionState.Broken)
{
Connection.Close();
Connection.Open();
}
}
public void CloseConnection()
{
if (Connection.State == ConnectionState.Open || Connection.State == ConnectionState.Broken)
{
Connection.Close();
}
}
}
}
//窗体跳转及传参
//先在FrmShopAdmin窗体中声明两个public访问级别的变量 uname 和 pwd
FrmShopAdmin frmShopAdmin = new FrmShopAdmin();
frmShopAdmin.uname = this.txtUName.Text.Trim();
frmShopAdmin.pwd = this.txtPwd.Text.Trim();
frmShopAdmin.Show();
//以上操作及将当前窗体的用户名和密码传给下一个窗体
//也可以使用一个类 里面定义两个属性 用户名和密码 传参时 传一个该类的对象
//ListView控件
使用Columns属性来为ListView添加列
//添加lv的子项的两种方法
ListViewItem iteme = new ListViewItem("E:盘",0);
iteme.ImageIndex = 2;//该子项显示的图片的索引
iteme.SubItems.Add("本地磁盘");
iteme.SubItems.Add("250g");
iteme.SubItems.Add("100g");
lvShow.Items.Add(iteme);//给lv中添加一个子项
ListViewItem itemf = new ListViewItem();
itemf.Text = "F:盘";
itemf.ImageIndex = 3;//该子项显示的图片的索引
itemf.SubItems.AddRange(new String[]{"本地磁盘","1024g","300g"});
lvShow.Items.Add(itemf);//给lv中添加一个子项
//cbo绑定
DBHelper dbhelper = new DBHelper();
//直接绑定cbo
//1.准备sql语句
String sql = @"";
//adapter执行填充
adapter = new SqlDataAdapter(sql, helper.Connection);
ds = new DataSet();
adapter.Fill(ds, "表名");
//创建新行
DataRow row = ds.Tables["表名"].NewRow();
row[0] = "-1";
row[1] = "请选择";
ds.Tables["表名"].Rows.InsertAt(row, 0);
//创建一个个cbo视图
dvCboLeave = new DataView(ds.Tables["表名"]);
//用视图绑定两个com
cmoboBox(名字).DataSource = dvCboLeave;
cmoboBox(名字).ValueMember = "表中的id'";
cmoboBox(名字).DisplayMember = "表中的名字name";
//dgv绑定
DBHelper helper = new DBHelper();
DataSet ds = new DataSet();
DataView dv = null;
String sql = @"SELECT [CommodityID],[CommodityName],[CommoditySort].[SortName]
,[CommodityPrice],[IsDiscount],[ReducedPrice]
FROM [Commodity] inner join [CommoditySort]
on [Commodity].SortID=[CommoditySort].SortID";
adapter = new SqlDataAdapter(sql, helper.Connection);
if (ds.Tables["Commodity"] != null)
{
ds.Tables["Commodity"].Clear();
}
adapter.Fill(ds, "Commodity");
dv = new DataView(ds.Tables["Commodity"]);
this.dgvGoods.DataSource = dv;//当前dgv的数据源为上面的DataView对象dv
//DataView数据筛选
dv = new DataView(ds.Tables["Commodity"]);
if (tvGoods.SelectedNode.Tag.ToString()=="2")
{
dv.RowFilter = "IsDiscount='false'";//条件(WHERE)
}
else if (tvGoods.SelectedNode.Tag.ToString()=="3")
{
dv.RowFilter = "IsDiscount";//条件(WHERE)
}
this.dgvGoods.DataSource = dv;
public FrmStart()
{
InitializeComponent();
//构造函数中注册自检事件
txtFB.LostFocus+=new EventHandler(txt_LostFocus);//注册失去焦点事件
txtFB.GotFocus+=new EventHandler(txt_GotFocus);//注册获得焦点事件
}
//控件获得焦点相应方法
private void txt_GotFocus(objict sender,EventArgs e)
{
this.txtFB.Text="";
}
//控件失去焦点相应方法
private void txt_LostFocus(objict sender,EventArgs e)
{
this.txtFB.Text="提示文本";
}
```
S1北大青鸟笔记
最新推荐文章于 2024-08-19 16:01:20 发布