【017】◀▶ C#学习(九) - ADO.NET
《C#入门经典(中文第四版)》在程序中访问数据库学习笔记
---------------------------------------------------------------------------------------------------------
●·● 目录:
A0 ………… System.Data.SqlClient 命名空间
A1 ………… SqlConnection 类
A2 ………… SqlCommand 类(增、删、改、查代码)
A3 ………… SqlDataReader 类
A4 ………… SqlParameter 类
※ 参考:SQLHelper 语句
A5 ………… SqlDataAdapter 类
A6 ………… System.Data 命名空间
A7 ………… DataTable 类
A8 ………… DataSet 类
A9 ………… DataTableCollection 类
G1 ………… DataRow 类
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A0个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● System.Data.SqlClient 命名空间:
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SqlConnection 类:
1. 表示 SQL Server 数据库的一个打开的连接。无法继承此类。
2.SqlConnection 属性:
- ConnectionString:获取或设置用于打开 SQL Server 数据库的字符串。
- ConnectionTimeout:获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
- Database:获取当前数据库或连接打开后要使用的数据库的名称。
- DataSource:获取要连接的 SQL Server 实例的名称。
3. SqlConnection 方法:
- ChangePassword:将连接字符串中指示的用户的 SQL Server 密码更改为提供的新密码。
- Close:关闭与数据库的连接。这是关闭任何打开连接的首选方法。
- Open:使用 ConnectionString 所指定的属性设置打开数据库连接。
- CreateCommand:创建并返回一个与 SqlConnection 关联的 SqlCommand 对象。
1 2 3 4 5 6 | using (SqlConnection conn = new SqlConnection( @"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" )) { conn.Open(); conn.Close(); } |
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SqlCommand 类:
1. 表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。无法继承此类。
2. SqlCommand 构造函数:
- SqlCommand():初始化 SqlCommand 类的新实例。
- SqlCommand(String):用查询文本初始化 SqlCommand 类的新实例。
- SqlCommand(String, SqlConnection):初始化具有查询文本和 SqlConnection 的 SqlCommand 类的新实例。
- SqlCommand(String, SqlConnection, SqlTransaction):使用查询文本、一个 SqlConnection 以及 SqlTransaction 来初始化 SqlCommand 类的新实例。
3. SqlCommand 属性:
- CommandText: 获取或设置要对数据源执行的 Transact-SQL 语句或存储过程。
- CommandTimeout:获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
- CommandType:获取或设置一个值,该值指示如何解释 CommandText 属性。
CommandType 枚举:- StoredProcedure:存储过程的名称。
- TableDirect:表的名称。
- Text:SQL 文本命令。
12SqlCommand cmd =
new
SqlCommand(
"login"
, conn);
cmd.CommandType = CommandType.StoredProcedure;
//这里采用存储过程
- Connection:获取或设置 SqlCommand 的此实例使用的 SqlConnection。
- Transaction:获取或设置将在其中执行 SqlCommand 的 SqlTransaction。
- Parameters:获取 SqlParameterCollection。(SQL中的参数集合)
- SqlParameterCollection 类
Count:返回一个整数,其中包含 SqlParameterCollection 中元素的数目。 只读。
Item[Int32]:获取指定索引处的 SqlParameter。
Item[String]:获取具有指定名称的 SqlParameter。
Add (SqlParameter):将指定的 SqlParameter 对象添加到 SqlParameterCollection 中。
AddWithValue (String parameterName, Object value):将一个值添加到 SqlParameterCollection 的末尾。在执行此方法的时候,会直接将参数传递!
Insert - 增(使用 Parameters & 直接利用文本)
123cmd.CommandText =
"Insert Into Table1(UserName, PassWord) Values(@UN, @PW)"
;
cmd.Parameters.AddWithValue(
"UN"
, textBox1.Text.Trim());
cmd.Parameters.AddWithValue(
"PW"
, textBox2.Text.Trim());
123cmd.CommandText =
String.Format(
"Insert into Table1(UserName, PassWord) Values('{0}', '{1}')"
,
textBox1.Text.Trim(), textBox2.Text.Trim());
Delete - 删(使用 Parameters & 直接利用文本)
12cmd.CommandText =
"Delete From Table1 Where UserName = @UN"
;
cmd.Parameters.AddWithValue(
"UN"
, textBox3.Text.Trim());
12cmd.CommandText = String.Format(
"Delete From Table1 Where UserName = '{0}'"
,
textBox3.Text.Trim());
Update - 改(使用 Parameters & 直接利用文本))
123cmd.CommandText =
"Update Table1 Set PassWord = @PW Where UserName = @UN"
;
cmd.Parameters.AddWithValue(
"PW"
, textBox5.Text.Trim());
cmd.Parameters.AddWithValue(
"UN"
, textBox4.Text.Trim());
123cmd.CommandText = String.Format(
"Update Table1 Set PassWord = '{0}' Where UserName = '{1}'"
,
textBox5.Text.Trim(), textBox4.Text.Trim());
Select - 查(使用 Parameters & 直接利用文本)
12cmd.CommandText =
"Select * From Table1 Where UserName = @UN"
;
cmd.Parameters.AddWithValue(
"UN"
, textBox6.Text.Trim());
12cmd.CommandText = String.Format(
"Select * From Table1 Where UserName = '{0}'"
, textBox6.Text.Trim());
- Clear:从 SqlParameterCollection 中移除所有 SqlParameter 对象。遍历的时候要注意清理!
123456789101112131415161718private
static
void
UpdateDemographics(Int32 customerID,
string
demoXml,
string
connectionString)
{
// Update the demographics for a store, which is stored in an xml column.
string
commandText =
"UPDATE Sales.Store SET Demographics = @demographics "
+
"WHERE CustomerID = @ID;"
;
using
(SqlConnection connection =
new
SqlConnection(connectionString))
{
SqlCommand command =
new
SqlCommand(commandText, connection);
command.Parameters.Add(
"@ID"
, SqlDbType.Int);
command.Parameters[
"@ID"
].Value = customerID;
// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue(
"@demographics"
, demoXml);
}
}
- SqlParameterCollection 类
4. SqlCommand 方法:
- Cancel: 尝试取消 SqlCommand 的执行。
- CreatParameter:创建 SqlParameter 对象的新实例。
- EndExecuteNonQuery:完成 Transact-SQL 语句的异步执行。
- ExecuteNonQuery:对连接执行 Transact-SQL 语句并返回受影响的行数。主要执行 Insert、Update、Delete 语句。
1234567891011121314151617181920
Console.WriteLine(
"请输入用户名:"
);
string
username = Console.ReadLine();
Console.WriteLine(
"请输入密码:"
);
string
password = Console.ReadLine();
using
(SqlConnection conn =
new
SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"
))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
"Insert into T_Users3(UserName,PassWord) values('"
+ username +
"','"
+ password +
"')"
;
//等同于下面的表述
cmd.CommandText =
String.Format(
"Insert into T_Users3(UserName,PassWord) values('{0}','{1}')"
, username, password);
cmd.ExecuteNonQuery();
Console.WriteLine(
"插入成功!"
);
Console.WriteLine(
"影响行数为:{0}行!"
,cmd.ExecuteNonQuery());
//返回值为int
}
}
- ExecuteReader:将 CommandText 发送到 Connection 并生成一个 SqlDataReader。主要执行 Select 语句。
- SqlDataReader:提供一种从 SQL Server 数据库读取行的只进流的方式。 此类不能被继承。
FieldCount:获取当前行中的列数。
Item[Int32]:在给定列序号的情况下,获取指定列的以本机格式表示的值。例如:reader[0]
Item[String]:在给定列名称的情况下,获取指定列的以本机格式表示的值。例如:reader["ID"]
HasRows:获取一个值,该值指示 SqlDataReader 是否包含一行或多行。
1234567891011121314151617using
(SqlConnection conn =
new
SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
"Select * From Table1"
;
SqlDataReader reader = cmd.ExecuteReader();
string
str =
"用户名\t密码\r\n"
;
while
(reader.Read())
{
str = String.Format(
"{0}{1}\t\t{2}\r\n"
, str, reader[
"UserName"
], reader[
"PassWord"
]);
}
richTextBox1.Text = str;
}
conn.Close();
}
- SqlDataReader:提供一种从 SQL Server 数据库读取行的只进流的方式。 此类不能被继承。
- ExecuteScalar:执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
1234567891011121314
using
(SqlConnection conn =
new
SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"
))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
//加入了 output inserted.Id 之后会返回最后插入的Id
cmd.CommandText =
"Insert into T_Users3(UserName,PassWord) output inserted.Id values('admin','888888')"
;
int
i = Convert.ToInt32(cmd.ExecuteScalar());
Console.WriteLine(
"插入成功!"
);
Console.WriteLine(
"刚插入的为第{0}行!"
,i);
}
}
※ 参考:http://hi.baidu.com/asdfhxc/blog/item/3f0d95ad5d3966004a36d6bd.html
※ 参考:http://hi.baidu.com/asdfhxc/blog/item/c5ddcf6060eb974deaf8f8bf.html
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A3个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SqlDataReader 类:
1. 提供一种从 SQL Server 数据库读取行的只进流的方式。无法继承此类。【适合大数据量,每次传入一行数据】
2. SqlDataReader 属性:
- Depth:获取一个值,用于指示当前行的嵌套深度。
- FieldCount: 获取当前行中的列数。
- HasRows:获取一个值,该值指示 SqlDataReader 是否包含一行或多行。
- IsClosed:检索一个布尔值,该值指示是否已关闭指定的 SqlDataReader 实例。
- Item:获取以本机格式表示的列的值。
- RecordsAffected:获取执行 Transact-SQL 语句所更改、插入或删除的行数。
- VisibleFieldCount:获取 SqlDataReader 中未隐藏的字段的数目。
3. SqlDataReader 方法:
- GetInt32(int i):获取指定列的 32 位有符号整数形式的值。
- GetString(int i):获取指定列的字符串形式的值。
0 为第一列,1 为第二列,2 为第三列...... - GetOrdinal(String name):在给定列名称的情况下获取列序号。
获得的值即为上面的0,1,2...... - Read():使 SqlDataReader 前进到下一条记录。
1234567891011121314151617181920212223using
(SqlConnection conn =
new
SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"
))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
"select * from T_Users3"
;
using
(SqlDataReader reader = cmd.ExecuteReader())
{
while
(reader.Read())
//一条条地往下执行
{
//简单判断以字母开头的UserName
if
(reader.GetString(1)[0] <
'z'
&& reader.GetString(1)[0] >
'A'
)
{
//通过PadRight,用空格将右侧补齐
Console.WriteLine(reader.GetInt32(reader.GetOrdinal(
"Id"
)).ToString().PadRight(5) +
reader.GetString(reader.GetOrdinal(
"UserName"
)).Trim().PadRight(15) +
reader.GetString(reader.GetOrdinal(
"PassWord"
)).PadRight(20));
}
}
}
}
}
效果如下图所示:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566//通过上面四个类,建立了一个验证密码的控制台程序!Check it out!!!
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Data.SqlClient;
namespace
ConsoleApplication1
{
class
Program
{
static
void
Main(
string
[] args)
{
//vs内嵌数据库,需加入此语句!
string
dataDir = AppDomain.CurrentDomain.BaseDirectory;
if
(dataDir.EndsWith(
@"\bin\Debug\"
) ||dataDir.EndsWith(
@"\bin\Release\"
))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData(
"DataDirectory"
,dataDir);
}
//先建立数据库,并加入测试的UserName和PassWord列!
Console.WriteLine(
"请输入用户名:"
);
string
username = Console.ReadLine();
Console.WriteLine(
"请输入密码:"
);
string
password = Console.ReadLine();
using
(SqlConnection conn =
new
SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database2.mdf;
Integrated Security=True;
User Instance=True"
))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
//注意这个地方的单引号,很容易出错的!
cmd.CommandText =
"select * from T_Users where UserName = '"
+ username +
"'"
;
using
(SqlDataReader reader = cmd.ExecuteReader())
//查找上面的username!
{
if
(reader.Read())
//存在则为true
{
//用户名存在
//在PassWord列中遍历
string
dbpassword = reader.GetString(reader.GetOrdinal(
"PassWord"
));
//注意要去掉数据库中字符串的空格,默认有空格的!
if
(password == dbpassword.Trim())
{
Console.WriteLine(
"登陆成功!"
);
}
else
{
Console.WriteLine(
"登录失败!"
);
}
}
else
{
Console.WriteLine(
"用户名错误!"
);
}
}
}
}
Console.ReadKey();
}
}
}
12345678910111213141516171819202122//简单变形,达到上面的效果!
Console.WriteLine(
"输入用户名:"
);
string
username = Console.ReadLine();
Console.WriteLine(
"输入密码:"
);
string
password = Console.ReadLine();
using
(SqlConnection conn =
new
SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"
))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
//用户名正确,密码可以用:”3' or '1' = '1“,也可以登录成功!
cmd.CommandText =
"select count(*) from T_Users3 where UserName = '"
+ username +
"' and PassWord = '"
+ password +
"'"
;
int
i = Convert.ToInt32(cmd.ExecuteScalar());
if
(i > 0)
Console.WriteLine(
"Login Succeed!"
);
else
Console.WriteLine(
"Login Failed!"
);
}
}
123456789101112131415161718192021222324//用 SqlCommand 类的 Parameters 属性改写!
Console.WriteLine(
"输入用户名:"
);
string
username = Console.ReadLine();
Console.WriteLine(
"输入密码:"
);
string
password = Console.ReadLine();
using
(SqlConnection conn =
new
SqlConnection(
@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database2.mdf;Integrated Security=True;User Instance=True"
))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
"select count(*) from T_Users3 where UserName = @UserName and PassWord = @PassWord"
;
cmd.Parameters.AddWithValue(
"UserName"
, username);
cmd.Parameters.AddWithValue(
"PassWord"
, password);
int
i = Convert.ToInt32(cmd.ExecuteScalar());
if
(i > 0)
Console.WriteLine(
"Login Succeed!"
);
else
Console.WriteLine(
"Login Failed!"
);
}
}
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A4个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SqlParameter 类:
1. 表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射。无法继承此类。
2. SqlParameter 构造函数:
- SqlParameter (String, Object):用参数名称和新 SqlParameter 的一个值初始化 SqlParameter 类的新实例。
- SqlParameter (String, SqlDbType):用参数名称和数据类型初始化 SqlParameter 类的新实例。
SqlDbType 枚举:指定要用于 SqlParameter 中的字段和属性的 SQL Server 特定的数据类型。
- BigInt:Int64。
- Binary:Byte 类型的 Array。
首先,新建一个 SQLHelper 类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | class SQLHelper { //执行查询 public static int ExecuteNonQuery( string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection( @"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" )) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } return cmd.ExecuteNonQuery(); } } } //执行返回第一行第一列的内容 public static object ExecuteScalar( string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection( @"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" )) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } return cmd.ExecuteScalar(); } } } //执行返回内存中的表格 public static DataTable ExecuteDataTable( string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection( @"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" )) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } DataSet dataset = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dataset); DataTable table = dataset.Tables[0]; return table; } } } } |
然后,在程序中可以按照如下来调用,参数的个数可以从1个到无数个!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | private void button2_Click( object sender, EventArgs e) { SQLHelper.ExecuteNonQuery( "insert into Table1(UserName,PassWord) values(@UserName,@PassWord)" , new SqlParameter( "UserName" , textBox1.Text), new SqlParameter( "PassWord" , textBox2.Text)); //实现数据的插入 } private void button3_Click( object sender, EventArgs e) { SQLHelper.ExecuteNonQuery( "update Table1 set UserName = 'Mike',PassWord = 'love' where UserName = @UserName" , new SqlParameter( "UserName" ,textBox1.Text)); //实现数据的更新 } private void button4_Click( object sender, EventArgs e) { DataTable table = SQLHelper.ExecuteDataTable( "select * from Table1" ); for ( int i = 0; i < table.Rows.Count;i++ ) { DataRow row = table.Rows[i]; MessageBox.Show(row[ "UserName" ].ToString()); //实现表格存储到内存 } } |
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A5个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SqlDataAdapter 类:
1. 表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。无法继承此类。
2. SqlDataAdapter 构造函数:
- SqlDataAdapter (SqlCommand):初始化 SqlDataAdapter 类的新实例,用指定的 SqlCommand 作为 SelectCommand 的属性。
3. SqlDataAdapter 属性:
- DeleteCommand:获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。
- InsertCommand:获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。
- SelectCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。
- UpdateCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。
4. SqlDataAdapter 方法:
- Fill:填充 DataSet 或 DataTable。
- Fill (DataSet):在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个名为“Table”的 DataTable。
- Fill (DataTable):在 DataSet 的指定范围中添加或刷新行以匹配使用 DataSet、DataTable 和 IDataReader 名称的数据源中的行。
- Update:为 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SqlCommandBuilder 类:
1. 自动生成单表命令,用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调。无法继承此类。
2. SqlCommandBuilder 构造函数:
- SqlCommandBuilder ():初始化 SqlCommandBuilder 类的新实例。
- SqlCommandBuilder (SqlDataAdapter):使用关联的 SqlDataAdapter 对象初始化 SqlCommandBuilder 类的新实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using (SqlConnection conn = new SqlConnection( @"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" )) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from Table1" ; SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet dataset = new DataSet(); adapter.Fill(dataset); DataTable table = dataset.Tables[0]; DataRow row = table.Rows[0]; row[ "Name" ] = "Matthew" ; SqlCommandBuilder builder = new SqlCommandBuilder(adapter); //传入数据库 adapter.Update(dataset); MessageBox.Show( "修改成功!" ); } } |
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A7个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● System.Data 命名空间:
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A7个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● DataTable 类:
1. 表示一个内存中数据表
2. DataTable 属性:
- Columns:获取属于该表的列的集合。≡ DataColumnCollection
- DataColumnCollection 类:表示 DataTable 的 DataColumn 对象的集合。
- Count、Item、List。
- Add、Clear、IndexOf、InsertAt、Remove、RemoveAt。
- DataColumn 类:表示 DataTable 中的列的架构。
- DataColumnCollection 类:表示 DataTable 的 DataColumn 对象的集合。
- DataSet:获取此表所属的 DataSet。
- Rows:获取属于该表的行的集合。≡ DataRowCollection
- DataRowCollection 类:表示 DataTable 的行的集合。
- Count:获取该集合中 DataRow 对象的总数。
- Item:作为列表获取集合的项。(可以获取每一个表的值,对应 DataRow 对象)
- List:作为列表获取集合的项。
- Add(DataRow):将指定的 DataRow 添加到 DataRowCollection 对象中。
- Clear:清除所有行的集合。
- IndexOf:获取指定 DataRow 对象的索引。
- InsertAt:将新行插入到集合中的指定位置。
- Remove:从集合中移除指定的 DataRow。
- RemoveAt:从集合中移除指定索引处的行。
- DataRow 类:表示 DataTable 中的一行数据。
- DataRowCollection 类:表示 DataTable 的行的集合。
- TableName:获取或设置 DataTable 的名称。
3. DataTable 方法:
- Clear:清除所有数据的 DataTable。
- Copy:复制该 DataTable 的结构和数据。
- NewRow:创建与该表具有相同架构的新 DataRow。(并不是在数据表中添加了新行)
1234567DataRow myRow = dt.NewRow();
myRow[
"学生"
] =
"小蟹"
;
myRow[
"英语"
] = 82;
myRow[
"数学"
] = 93;
myRow[
"自然"
] = 39;
myRow[
"美术"
] = 39;
dt.Rows.Add(myRow);
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A8个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● DataSet 类:
1. 表示数据的内存中缓存。【适合小数据量的适合用,一次将所有放入内存】
2. DataSet 属性:
- Tables:获取包含在 DataSet 中的表的集合。≡ DataTableCollection
- DataTableCollection 类:表示 DataSet 的表的集合。
- Count:获取集合中的元素的总数。
- Item[Int32]:获取位于指定索引位置的 DataTable 对象。
- Item[String]:获取具有指定名称的 DataTable 对象。
- Count:获取集合中的元素的总数。
- DataTableCollection 类:表示 DataSet 的表的集合。
3. DataSet 方法:
- Clear:通过移除所有表中的所有行来清除任何数据的 DataSet。
- Copy:复制该 DataSet 的结构和数据。
- Merge (DataRow ()):将 DataRow 对象数组合并到当前的 DataSet 中。
- GetChanges:获取 DataSet 的副本,该副本包含自上次加载以来或自调用 AcceptChanges 以来对该数据集进行的所有更改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using (SqlConnection conn = new SqlConnection( @"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" )) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from Table1" ; DataSet dataset = new DataSet(); //相当于容器 SqlDataAdapter adapter = new SqlDataAdapter(cmd); //执行SQL语句 adapter.Fill(dataset); //传入数据 DataTable table = dataset.Tables[0]; //传给Table for ( int i = 0; i < table.Rows.Count;i++ ) //遍历Table的Row { DataRow row = table.Rows[i]; //传递给每个Row string name = Convert.ToString(row[ "UserName" ]); //取值 MessageBox.Show(name); } } } |
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A9个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● DataTableCollection 类:
1. 表示 DataSet 的表的集合。
2. DataTableCollection 属性:
- Count:获取集合中的元素的总数。
- Item (Int32):获取位于指定索引位置的 DataTable 对象。
- Item (String):获取具有指定名称的 DataTable 对象。
- Item (String dataTableName, String dataTableNamespace):获取指定命名空间中具有指定名称的 DataTable 对象。
- List:作为列表获取集合的项。≡ ArrayList
3. DataTableCollection 方法:
- Add:使用默认名称创建一个新的 DataTable 对象,并将其添加到集合中。
- Add (DataTable):将指定的 DataTable 添加到集合。
- Add (String):使用指定名称创建一个 DataTable 对象,并将其添加到集合中。
- AddRange:将指定的 DataTable 数组的元素复制到集合末尾。
- Clear:清除所有 DataTable 对象的集合。
- Contains (String):获取一个值,该值指示集合中是否存在具有指定名称的 DataTable 对象。
- CopyTo (DataTable(), Int32):将当前 DataTableCollection 的所有元素复制到一维 Array,从指定目标数组索引处开始。
- IndexOf (DataTable):获取指定 DataTable 对象的索引。
- IndexOf (String):获取具有指定名称的 DataTable 对象的集合中的索引。
- Remove (DataTable):从集合中移除指定的 DataTable 对象。
- Remove (String):从集合中删除具有指定名称的 DataTable 对象。
- RemoveAt:从集合中删除具有指定名称的 DataTable 对象。
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● DataRow 类:
1. 表示 DataTable 中的一行数据。
2. DataRow 属性:
- Item (DataColumn):获取或设置存储在指定的 DataColumn 中的数据。
- Item (Int32):获取或设置存储在由索引指定的列中的数据。
※ 使用:- row [0] 直接引用索引!
- row [0] 直接引用索引!
- Item (String):获取或设置存储在由名称指定的列中的数据。
※ 使用:- row ["UserName"] 直接引用列名称!
- row ["UserName"] 直接引用列名称!
- Table:获取该行拥有其架构的 DataTable。
- RowState:获取与该行和 DataRowCollection 的关系相关的当前状态。
RowState 枚举:获取 DataRow 对象的状态。- Detached:该行已被创建,但不属于任何 DataRowCollection。
- Unchanged:该行自上次调用 AcceptChanges 以来尚未更改。
- Added:该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。
- Deleted:该行已通过 DataRow 的 Delete 方法被删除。
- Modified:该行已被修改,AcceptChanges 尚未调用。
3. DataRow 方法:
- Delete:删除 DataRow。
- IsNull (DataColumn):获取一个值,该值指示指定的 DataColumn 是否包含 null 值。
- IsNull (Int32):获取一个值,该值指示位于指定索引处的列是否包含 null 值。
- IsNull (String):获取一个值,该值指示指定的列是否包含 null 值。
- SetNull:将指定的 DataColumn 的值设置为 null 值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)