<1> --SqlConnection
-> 构造方法提供连接字符串
-> 属性提供连接字符串
-> 连接字符串
-> data source=实例名;initial catalog=数据库名;integrated security=true/user id=…;password=…;
-> server=实例名;database=数据库名;integrated security=true/uid=…;pwd=…;
->当使用conn.open()时,应该为
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
<2>--SqlCommand
执行SQL语句需要知道在哪儿执行
-> SqlCommand需要提供SQL语句和连接通道
-> 常用三个方法
-> ExecuteNonQuery() 处理增、删、改,返回受影响行数
-> ExecuteScalar() 处理查询,返回首行首列
-> ExecuteReader() 处理查询,返回DataReader对象
<3>--ExecuteScalar
> 使用ExecuteScalar()执行SQL语句,返回第一行第一列,object类型
-> 转换使用Convert,不要使用强转
-> 使用ExecuteScalar()一般执行聚合查询
-> 使用ExecuteScalar()亦可查询select getdate()
-> 在添加数据的时候,得到自动增长id
-> 在value前使用output inserted.主键字段
<4>--ExecuteReader
查询多行数据,返回一个DataReader对象
-> HasRows属性表示查询结果
-> 提供连接通道用来持续得到数据
-> 并未将数据全部倒入到内存
-> 如何处理DataReader
-> 使用while循环,调用Read方法
-> 调一次,查一次
-> GetString()、GetInt32()、GetOrdinal()方法
-> 使用索引,索引器有重载
-> DataReader必须保证SqlConnection处于连接状态
--使用GET方法读出数据,既GET(类型名)(列的索引)
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
// reader.GetBoolean(列)
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string pwd = reader.GetString(2);
Console.WriteLine("{0}\t{1}\t{2}", id, name, pwd);
}
--读出多行数据时,使用while(reader.read())
--使用reader[索引]读取数据 ,reader["name"]
<5>数据集dataset
DataSet ds = new DataSet("MyData1");
--就是一个数据库
--里面可以存表
DataTable dt = new DataTable("MyTable1");
-- 创建列
DataColumn dc1 = new DataColumn("id", typeof(int));
dc1.AutoIncrement = true;
dc1.AutoIncrementSeed = 1;
dc1.AutoIncrementStep = 1;
-- 将列加到table中
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
ds.Tables.Add(dt);
--来一行数据
DataRow r1 = dt.NewRow();
r1["name"] = "张三";
ataRow r2 = dt.NewRow();
r2["name"] = "李四";
DataRow r3 = dt.NewRow();
r3["name"] = "王五";
dt.Rows.Add(r1);
dt.Rows.Add(r2);
dt.Rows.Add(r3);
--数据创建好了,现在想遍历这个数据
foreach (DataRow r in dt.Rows)
{
Console.WriteLine("{0}\t{1}", r["id"], r["name"]);
}
<6>Adapter
SqlDataAdapter sda = new SqlDataAdapter(
@"select top 10 * from Person order by Fid",
@"server=.\sqlexpress;database=MyDataBase;uid=sa;pwd=123"
);
-- Adapter有一个方法Fill
DataSet ds = new DataSet();
sda.Fill(ds);
ds.WriteXml("1.xml");
)
5.添加配置文件
// -> 添加应用配置文件
// -> 添加connectionString节点(name,connectionString)
// -> 添加引用Configuration
// -> 使用静态类ConfigurationManager
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="sql" connectionString="Data Source=.\sqlexpress;Initial Catalog=dataInOut;Integrated Security=True"/>
</connectionStrings>
</configuration>
static string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
6.参数化查询
--由于蛀虫漏洞的存在,在执行SQL语句时,应该在写SQL语句时使用变量
select count(*) from tblLogin where fname=@name and fpwd =@pwd
-- 使用查询的时候需要为变量赋值
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@name", txtUid.Text.Trim()));
cmd.Parameters.AddWithValue("@pwd", txtPwd.Text.Trim());
--parameters本身是一个集合,所以在循环等要执行clear方法
7.数据绑定
SqlDataAdapter sda = null;
DataSet ds;
private void btnInput_Click(object sender, EventArgs e)
{
// 导入数据
ds = new DataSet();
sda = new SqlDataAdapter(
@"select * from Person",
@"server=.\sqlexpress;database=MyDataBase;uid=sa;pwd=123"
);
sda.Fill(ds);
dgw.DataSource = ds.Tables[0];
--将ds数据集中的第一个表的数据放入DataGridView中