张磊(Avraber)

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


<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中

posted on 2012-07-15 23:03  张磊(Avraber)  阅读(179)  评论(0编辑  收藏  举报