C# ADO.NET编写简单的图书馆管理软件
使用软件:
Microsoft SQL Server 2012
Microsoft Visual Studio 2012
本文地址: http://www.cnblogs.com/go2bed/
参考资料:
http://www.w3school.com.cn/ W3School
http://blog.csdn.net/lvfeng19806001/article/details/8175153 WinForm控件缩写
及其他。
经验、注意与感悟:
- 图书馆需要的控件略多,注意命名规范。因为名字会很长,网上有观点建议可以使用缩写:btnSubmit(一个按钮)等。(下附详细)
- 写一个静态类,执行SQL语句。执行SELECT的返回DataSet;执行Delete、Update、Insert的返回“受影响行数”,且可以合为一个方法。SQL语句较强大,不只是几个基本操作,组合使用很实用。
- 注意数据库的设计,主键不要对用户可见。设置级联删除等。时间存储使用了SmallDateTime。
- 将“管理员”和“普通用户”的权限区分开。
- 很多细节可以优化。例如搜索功能,可以输入完毕立即搜索,不必点击搜索键。CheckBox,选中后,自动进行反应。
- DataGridView可有很多玩法。
- ComboBox显示数据库内容的细节:
comboBox1.DataSource = TypesDataSet.Tables[0];
comboBox1.ValueMember = "type"; //type是数据库的列名。
获取ComboBox 选中的值: comboBox.SelectedValue.ToString()
8.窗口间传值,窗体的Show、Hide、Dispose、Application.Exit();等。
9.及其他。
源代码就不贴了。程序和数据库就不发了。
相关知识:
SQL
结构化查询语言(Structured Query Language),简称SQL(发音:/ˈɛs kjuː ˈɛl/ "S-Q-L")
http://baike.baidu.com/view/595350.htm?fr=aladdin 百度百科
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
select
SELECT LastName,FirstName FROM Persons
"Persons" 表:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
结果:
LastName |
FirstName |
Adams |
John |
Bush |
George |
Carter |
Thomas |
SELECT * FROM Persons
提示:星号(*)是选取所有列的快捷方式。
SELECT DISTINCT Company FROM Orders
对于一个列的重复数据,仅输出一次。即各个不同。
distinct adj. 有区别的
Where
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
下面的运算符可在 WHERE 子句中使用:
操作符 |
描述 |
= |
等于 |
<> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
BETWEEN |
在某个范围内 |
LIKE |
搜索某种模式 |
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
注意:
对于SQL server,可以使用 != 。
此处等于号使用 = 而不是 ==。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
desc
abbr. 降序排列(descend 的缩写)
descend
英 [dɪ'send] 美 [dɪ'sɛnd]
vi. 下降;下去;下来;遗传;屈尊
vt. 下去;沿…向下
ORDER 例子4个:
实例 1
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
结果:
Company |
OrderNumber |
Apple |
4698 |
IBM |
3532 |
W3School |
6953 |
W3School |
2356 |
实例 2
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
结果:
Company |
OrderNumber |
Apple |
4698 |
IBM |
3532 |
W3School |
2356 |
W3School |
6953 |
实例 3
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
结果:
Company |
OrderNumber |
W3School |
6953 |
W3School |
2356 |
IBM |
3532 |
Apple |
4698 |
实例 4
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
ASC 代表升序排序,从小到大
结果:
Company |
OrderNumber |
W3School |
2356 |
W3School |
6953 |
IBM |
3532 |
Apple |
4698 |
注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
语法
INSERT INTO 表名称 VALUES (值1, 值2,....)
我们也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
注: 在数据后加大写N,强制保存为Unicode格式。适用于汉字等。
Update 语句
Update 语句用于修改表中的数据。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
注: SET 后可以加多个列,用英文逗号隔开。
DELETE 语句
DELETE 语句用于删除表中的行。
语法
删除某一行:
DELETE FROM 表名称 WHERE 列名称 = 值
删除所有行:
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围
Microsoft Access 数据类型
数据类型 |
描述 |
存储 |
Text |
用于文本或文本与数字的组合。最多 255 个字符。 |
|
Memo |
Memo 用于更大数量的文本。最多存储 65,536 个字符。 注释:无法对 memo 字段进行排序。不过它们是可搜索的。 |
|
Byte |
允许 0 到 255 的数字。 |
1 字节 |
Integer |
允许介于 -32,768 到 32,767 之间的数字。 |
2 字节 |
Long |
允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字 |
4 字节 |
Single |
单精度浮点。处理大多数小数。 |
4 字节 |
Double |
双精度浮点。处理大多数小数。 |
8 字节 |
Currency |
用于货币。支持 15 位的元,外加 4 位小数。 提示:您可以选择使用哪个国家的货币。 |
8 字节 |
AutoNumber |
AutoNumber 字段自动为每条记录分配数字,通常从 1 开始。 |
4 字节 |
Date/Time |
用于日期和时间 |
8 字节 |
Yes/No |
逻辑字段,可以显示为 Yes/No、True/False 或 On/Off。 在代码中,使用常量 True 和 False (等价于 1 和 0) 注释:Yes/No 字段中不允许 Null 值 |
1 比特 |
Ole Object |
可以存储图片、音频、视频或其他 BLOBs (Binary Large OBjects) |
最多 1GB |
Hyperlink |
包含指向其他文件的链接,包括网页。 |
|
Lookup Wizard |
允许你创建一个可从下列列表中进行选择的选项列表。 |
4 字节 |
MySQL 数据类型
在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。
Text 类型:
数据类型 |
描述 |
CHAR(size) |
保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
VARCHAR(size) |
保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。 注释:如果值的长度大于 255,则被转换为 TEXT 类型。 |
TINYTEXT |
存放最大长度为 255 个字符的字符串。 |
TEXT |
存放最大长度为 65,535 个字符的字符串。 |
BLOB |
用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 |
MEDIUMTEXT |
存放最大长度为 16,777,215 个字符的字符串。 |
MEDIUMBLOB |
用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 |
LONGTEXT |
存放最大长度为 4,294,967,295 个字符的字符串。 |
LONGBLOB |
用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 |
ENUM(x,y,z,etc.) |
允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。 注释:这些值是按照你输入的顺序存储的。 可以按照此格式输入可能的值:ENUM('X','Y','Z') |
SET |
与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。 |
Number 类型:
数据类型 |
描述 |
TINYINT(size) |
-128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 |
SMALLINT(size) |
-32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 |
MEDIUMINT(size) |
-8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 |
INT(size) |
-2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 |
BIGINT(size) |
-9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 |
FLOAT(size,d) |
带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DOUBLE(size,d) |
带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DECIMAL(size,d) |
作为字符串存储的 DOUBLE 类型,允许固定的小数点。 |
* 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
Date 类型:
数据类型 |
描述 |
DATE() |
日期。格式:YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31' |
DATETIME() |
*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' |
TIMESTAMP() |
*时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
TIME() |
时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59' |
YEAR() |
2 位或 4 位格式的年。 注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 |
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
SQL Server 数据类型
Character 字符串:
数据类型 |
描述 |
存储 |
char(n) |
固定长度的字符串。最多 8,000 个字符。 |
n |
varchar(n) |
可变长度的字符串。最多 8,000 个字符。 |
|
varchar(max) |
可变长度的字符串。最多 1,073,741,824 个字符。 |
|
text |
可变长度的字符串。最多 2GB 字符数据。 |
|
Unicode 字符串:
数据类型 |
描述 |
存储 |
nchar(n) |
固定长度的 Unicode 数据。最多 4,000 个字符。 |
|
nvarchar(n) |
可变长度的 Unicode 数据。最多 4,000 个字符。 |
|
nvarchar(max) |
可变长度的 Unicode 数据。最多 536,870,912 个字符。 |
|
ntext |
可变长度的 Unicode 数据。最多 2GB 字符数据。 |
|
Binary 类型:
数据类型 |
描述 |
存储 |
bit |
允许 0、1 或 NULL |
|
binary(n) |
固定长度的二进制数据。最多 8,000 字节。 |
|
varbinary(n) |
可变长度的二进制数据。最多 8,000 字节。 |
|
varbinary(max) |
可变长度的二进制数据。最多 2GB 字节。 |
|
image |
可变长度的二进制数据。最多 2GB。 |
|
Number 类型:
数据类型 |
描述 |
存储 |
tinyint |
允许从 0 到 255 的所有数字。 |
1 字节 |
smallint |
允许从 -32,768 到 32,767 的所有数字。 |
2 字节 |
int |
允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 |
4 字节 |
bigint |
允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 |
8 字节 |
decimal(p,s) |
固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。 s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 |
5-17 字节 |
numeric(p,s) |
固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。 s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 |
5-17 字节 |
smallmoney |
介于 -214,748.3648 和 214,748.3647 之间的货币数据。 |
4 字节 |
money |
介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 |
8 字节 |
float(n) |
从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 |
4 或 8 字节 |
real |
从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 |
4 字节 |
Date 类型:
数据类型 |
描述 |
存储 |
datetime |
从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 |
8 bytes |
datetime2 |
从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 |
6-8 bytes |
smalldatetime |
从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 |
4 bytes |
date |
仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 |
3 bytes |
time |
仅存储时间。精度为 100 纳秒。 |
3-5 bytes |
datetimeoffset |
与 datetime2 相同,外加时区偏移。 |
8-10 bytes |
timestamp |
存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。 |
|
其他数据类型:
数据类型 |
描述 |
sql_variant |
存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。 |
uniqueidentifier |
存储全局标识符 (GUID)。 |
xml |
存储 XML 格式化数据。最多 2GB。 |
cursor |
存储对用于数据库操作的指针的引用。 |
table |
存储结果集,供稍后处理。 |
关于SQL连接、数据的类
参见 http://baike.baidu.com/view/159519.htm?fr=aladdin
DataSet
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。
在实际应用中,DataSet使用方法一般有三种:
(1) 把数据库中的数据通过DataAdapter对象填充DataSet。
(2) 通过DataAdapter对象操作DataSet实现更新数据库。
(3) 把XML数据流或文本加载到DataSet。
DataAdapter
DataSet对象表示数据源中数据的本地副本,它是Microsoft NET Framework的一个主要创新。DataSet对象本身可用来引用数据源,然而为了担当真正的数据管理工具,DataSet必须能够与数据源交互。为了实现该功能,.NET提供了DataAdapter类。
DataAdapter表示一组 SQL 命令和一个数据库连接,它们用于填充 DataSet和更新数据源。
操作
使用带SQL Server .NET数据提供程序的DataSet的步骤如下:
(1)创建SqlConnection对象,连接到SQL Server数据库。
(2)创建SqlDataAdapter对象。该对象包含能够指向4个SqlCommand对象的属性,这些对象指定SQL语句在数据库中进行SELECT、INSERT、DELETE和UPDATE等数据操作。
(3)创建包含一个或多个表的DataSet对象。
(4)使用SqlDataAdapter对象,通过调用Fill方法来填充DataSet表。SqlDataAdapter隐式执行包含SELECT语句的SqlCommand对象。
(5)修改DataSet中的数据。可以通过编程方式来执行修改,或者将DataSet绑定到用户界面控件(例如DataGrid),然后在控件中更改数据。
(6)在准备将数据更改返回数据库时,可以使用SqlDataAdapter并调用Update方法。SqlDataAdapter对象隐式使用其SqlCommand对象对数据库执行INSERT、DELETE和UPDATE语句。
操作代码
SqlConnection sqlCon = new SqlConnection(ConnectionStr);
string readCmdStr = "SELECT " + columnName + " FROM " + tableName;
SqlDataAdapter Adapter = new SqlDataAdapter(readCmdStr, sqlCon);
DataSet BooksDataSet = new DataSet();
Adapter.Fill(BooksDataSet);
sheet.DataSource = BooksDataSet.Tables[0];
sheet.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
sheet.Columns[0].Visible = false;
sheet.Columns[1].HeaderText = "书名";
sheet.Columns[2].HeaderText = "作者";
sheet.Columns[3].HeaderText = "编号";
sheet.Columns[4].HeaderText = "类型";
sheet.Columns[5].HeaderText = "实际位置";
sqlCon.Close();
DataReader
DataReader对象只允许以只读、顺向的方式查看其中所存储的数据,提供一个非常有效率的数据查看模式,同时DataReader对象还是一种非常节省资源的数据对象。
DataReader对象可通过Command对象的ExecuteReader方法从数据源中检索数据来创建。
示例(百度百科)
//连接数据库
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=(local);Integrated Security=SSPI;Initial Catalog=db_showHouse";
//打开连接
conn.Open();
SqlCommand cmd = new SqlCommand("select User_names from tb_User", conn);
SqlDataReader drNew = cmd.ExecuteReader();
if (drNew.HasRows)
{
while (drNew.Read())
{
MessageBox.Show(drNew[0].ToString());
}
}
drNew.Close();
我的代码:
SqlConnection sqlCon = new SqlConnection(ConnectionStr);
string checkCmdStr = "SELECT * FROM " + tableName;
SqlCommand checkCmd = new SqlCommand(checkCmdStr,sqlCon);
SqlDataReader reader = checkCmd.ExecuteReader();
bool isLoginSucceeded = false;
while (reader.Read())
{
if (Id == Convert .ToString( reader.GetValue(0) )&& Password == Convert.ToString( reader.GetValue(1)))
{
isLoginSucceeded = true;
break;
}
}
reader.Close();
sqlCon.Close();
if (isLoginSucceeded)
{
MessageBox.Show("登录成功");
return true;
}
else
{
MessageBox.Show("登录失败,请检查用户名或密码");
return false;
}
SqlCommand
http://baike.baidu.com/view/3574729.htm?fr=aladdin
SqlCommand cmd = new SqlCommand("insert into mynews value ('插入一条新数据')", con);
Command对象的构造函数的参数有两个,一个是需要执行的SQL语句,另一个是数据库连接对象。创建Command对象后,就可以执行SQL命令,执行后完成并关闭数据连接,示例代码如下所示。
cmd.ExecuteNonQuery(); //执行SQL命令
con.Close(); //关闭连接
我的代码:
SqlConnection sqlCon = new SqlConnection(ConnectionStr);
//只有在SQL语句, ‘’前加上大写 N,才能使汉字正确添加。表示Unicode形式。数字,英文可以不加。
string insertStr = "INSERT INTO Books (bookName, bookAuthor, bookNumber, bookType, bookLocation) VALUES (N'" + bookName + "',N'" + bookAuthor + "',N'" + bookNumber + "',N'" + bookType + "',N'" + bookLocation + "')";
SqlCommand insertCmd = new SqlCommand(insertStr, sqlCon);
int LineInfluence = insertCmd.ExecuteNonQuery(); //执行并返回影响行数
if (LineInfluence == 1)
{
MessageBox.Show("添加成功");
SQLSelect(sheet);
}
else
{
MessageBox.Show("添加失败");
}
SqlCommand和SqlDataAdapter的区别
SqlCommand对应DateReader
SqlDataAdapter对应DataSet
SqlCommand的执行效率比较高,但不灵活,功能也有限
SqlDataAdapter的效率要低点,它是连接的,可随时更新数据,功能强大。
很多编程用其中一种就可以了。
SqlCommand是C#中与Sql数据库打交道的对象,几乎所有的Sql数据库操作都需要使用该对象来实现,但其功能有限,只是简单的实现了与Sql数据库的接口而已;
SqlDataAdapter是一个功能强大的SqL数据适配器,也用于操作Sql数据库,但它的操作都要通过SqlCommand来实现(有一个属性对象的类型就是SqlCommand),也就是说,可以把SqlDataAdapter看作是一个把一些特殊功能封装了、增强了的SqlCommand!
adapter是和dataset打交道的,command不能直接与dataset打交道,要通过adapter. adapter的定义是基于command的,当然也可以之间在定义adapter的时候写入sql语句和connection对象 如<BR>dim ada as new sqlclient.sqladapter(select * from stu,conn1)<BR><BR>也可以这么写 dim com1 as new sqlclient.sqlcommand(select * from stu,conn1)<BR>
dim ada as new sqlclient.sqladapter(com1)<BR>
想要把数据显示出来就不得不用到adapter来给dataset传值,而command不能直接传值给dataset 可以这样理解: DataSet用来装表的集合,里面可以装从SqlDataAdapter中返回的一系列的DataTable 如果返回的有多张表,那么我们可以通过索引的方式来找到想要的表:DataTable dt = ds.Tables[0];或DataTable dt = ds.Tables["products"]; DataSet可以直接做为数据控件的数据源,也可以从中获取表或表的视图来做为数据源.如: this.DataList1.DataSource = dt; this.DataList2.DataSource = dt.Tables[0]; this.Datalist3.DataSource = dt.Tables[0].DefaultView; 这三句的效果都是一样的. SqlDataAdapter是针对于SQL数据库的一个数据适配器,对应的还有OledbDataAdapter等等,它起着牵线搭桥的作用,我们可以用它来创建或是执行一个数据库操作命令,并将返回的结果集填充到DataSet中去.
WinForm控件缩写
控件名称
缩写
Buttom按钮
Btn
CheckBox复选框
Chk
ColumnHeader视图列表头
Col
ComboBox组合框
Cbo
ContextMenu快捷菜单
Ctm
DataGrid数据网格控件
Dg
DataGridView数据网格视图控件
Dgv
DteTimePicker时间输入框
Dtp
DomainUpDown数值框
Dud
Form窗体
Frm
GroupBox 组合框
Grp
HscrollBar水平滚动条
Hsb
ImageList图标列表
Img
Label文本标签
Lbl
LinkLabel列表框
Lbl
ListBox列表框
Lst
ListView视图列表
Lvw
Menu菜单
Menu
MenuItem菜单项
Menu
NumericUpDown数值框
Nud
Panel面板
Pnl
PictureBox图片框
Pic
ProgressBar进度条
Prg
RadioButton单选框按钮
Rdo
Spliter拆分条
Spl
StatusBar状态栏
Stu
StatusBarPanel状态栏区域
Stupnl
StatusStrip状态栏
Stu
TabControl分页控件
Tab
TabPage分页标签页面
Page
TextBox文本框
Txt
Timer定时器
Tmr
ToolBar工具条
Tbr
ToolStrip工具栏
Tsp
TooStripButton工具栏按钮
tspBtn
ToolStripComboBox工具栏下拉组合框
tspCbo
ToolStripDropDownMenu工具栏菜单项目
tspMenu
ToolStripLable工具栏静态文本
tspLbl
ToolStripProgressBar工具栏进度条
tspPrg
ToolStripTextBox工具栏文本框
Tsptxt
TreeView树状视图列表
Tvw
VscrollBar垂直滚动条
Vsb
WebBrowSer浏览器控件
Wb
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议(CC BY-NC-ND 4.0)进行许可。
This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License (CC BY-NC-ND 4.0).