.NET数据访问概要

用ASP.NET做了一个项目,但是,对于C#的一些东西并没有仔细学过,这几天仔细看了一下.NET数据访问的内容,做了笔记。如下

 

1、一般把数据库连接字符串写在config文件中:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <appSettings>
  4.     <add key="ConnectionString"
  5.          value="Data Source=LZQSMST-PC;
  6.          Initial Catalog=JobHunter;
  7.          Persist Security Info=True;
  8.          User ID=sa;
  9.          password=111111"/>
  10.   </appSettings>
  11.   <connectionStrings>
  12.     <add name="ConnectionString"
  13.          providerName="System.Data.SqlClinet"
  14.          connectionString="
  15.          Data Source=LZQSMST-PC;
  16.          Initial Catalog=JobHunter;
  17.          Persist Security Info=True;
  18.          User ID=sa;
  19.          password=111111/>
  20.   </connectionStrings>
  21. </configuration>


2、获取连接字符串:
(1)代码文件中,要using System.Configuration。
(2)添加System.Configuration引用,就是在项目的解决方案栏中,右键添加System.Configuration引用,如果没有这一步,无法使用ConfigurationManager。
(3)获取的代码有以下几种:

  1. ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  2. ConfigurationManager.AppSettings["ConnectionString"];

3、高效的连接方式
(1)使用try catch finaly

  1.             try
  2.             {
  3.                 conn.Open();
  4.             }
  5.             catch (Exception ex)
  6.             {
  7.                 textBox1.Text += ex.Message;
  8.             }
  9.             finally
  10.             {
  11.                 conn.Close();
  12.             }

(2)使用using

  1.             using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
  2.             {
  3.                 conn.Open();
  4.                 //do something
  5.                 conn.Close();
  6.             }

(3)以上两种的综合

  1.            try
  2.             {
  3.                 using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
  4.                 {
  5.                     conn.Open();
  6.                     //do something
  7.                     conn.Close();
  8.                 }
  9.             }
  10.             catch (Exception ex)
  11.             {
  12.                 textBox1.Text += ex.Message;
  13.             }

4、事务处理

  1.            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
  2.             {
  3.                conn.Open();
  4.                //SqlTransaction tx = conn.BeginTransaction(IsolationLevel.ReadCommitted);IsolationLevel.ReadCommitted, "SampleTransaction");//隔离级别、事务名称
  5.                SqlTransaction tx = conn.BeginTransaction();
  6.                try
  7.                {
  8.                    //do something
  9.                    tx.Commit();
  10.                    conn.Close();
  11.                }
  12.                catch (Exception e)
  13.                {
  14.                     try
  15.                    {
  16.                        tx.Rollback();
  17.                    }
  18.                    catch (SqlException ex)
  19.                    {
  20.                        if (tx.Connection != null)
  21.                        {
  22.                            Console.WriteLine("An exception of type " + ex.GetType() +
  23.                               " was encountered while attempting to roll back the transaction.");
  24.                        }
  25.                    }
  26.                    Console.WriteLine("An exception of type " + e.GetType() +
  27.                    " was encountered while inserting the data.");
  28.                    Console.WriteLine("Neither record was written to database.");
  29.                }
  30.         }

5、命令SQLCommand
(1)两种构造方式:

  1. SqlCommand com = new SqlCommand();
  2. SqlCommand com = conn.CreateCommand();//conn为一SqlConnection对象

(2)初始化赋值:

  1. com.Connection = conn;//conn为一SqlConnection对象
  2. com.Transaction = tx;//tx为一SqlTransaction对象
  3.  com.CommandText = "SELECT * FROM [tb1]"
  4. com.CommandType = CommandType.Text;//默认就是Text,如果是存储过程,应该是CommandType.StoredProcedure

6、执行命令
(1)ExecuteNonQuery
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数(int)。对于其他所有类型的语句,例如select,返回值为 -1。

(2)ExecuteReader
返回一个SqlDataReader,记住,是SqlDataReader,不是DataSet,SqlDataReader不能直接实例化,就是不能直接new
读取方式如下:               

  1. while(dr.Read()) //dr为一SqlDataReader对象
  2. {
  3.     textBox1.Text += dr["a1"].ToString() + "/r/n"
  4.     //textBox1.Text += dr[0].ToString() + "/r/n";
  5.     //dr.GetString(0) + "/r/n";
  6. }

(3)ExecuteScalar
执行查询,并返回查询所返回的结果集中第一行的第一列。所有其他的列和行将被忽略。
这适用与只返回一个值的存储过程。

(4)ExecuteXmlReader
类似于ExecuteReader,返回一个xml的reader,注意:com.CommandText ="SELECT * FROM [tb1] for xml auto",即后面有类似于for xml auto/raw/explicit(使执行结果以xml文本返回)。

  1. SqlDataReader dr = com.ExecuteReader();
  2. while(dr.Read())
  3. {
  4.     textBox1.Text += dr["a1"].ToString() + "/t";
  5.     textBox1.Text += dr["a2"].ToString() + "/t";
  6.     textBox1.Text += dr["a3"].ToString() + "/r/n";
  7. }
  8. //xr.ReadOuterXml()是另外一个好用的方法

6、调用存储过程
调用存储过程时,可以把存储过程的名字直接写在com.CommandText中,存储过程的参数使用SqlParameter类型,用com.Parameters.Add(new SqlParameter(...))
执行时,用ExecuteNonQuery就可以了
(1)有返回值的存储过程
设置com.UpdatedRowSource = UpdateRowSource.None即可
(2)没返回值的存储过程
需要设置SqlParameter参数的sp.Direction = ParameterDirection.Output/InputOutput等;
另外com.UpdatedRowSource = UpdateRowSource.OutputParameters

7、SqlDataAdapter 和 DataSet
配合起来用:

  1. SqlDataAdapter da = new SqlDataAdapter(com);
  2. DataSet ds = new DataSet();
  3. da.Fill(ds);
  4. DataTable dt = ds.Tables[0];

(1)如果SqlDataReader实例的话,在调用SqlDataAdapter时,要先把SqlDataReader给close掉
(2)DataSet由一个或多个DataTable组成,一个DataTable由一个或多个DataRow/DataColumn组成,dt.Rows[2][0]相当于dt.Columns[0][2];
DataTable.PrimaryKey指向一个DataColumn,设置其为主键;
为一个表设置外键时,要使用

  1. dt2.Constraints.Add(new UniqueConstraint(dt2.columns[0]));
  2. dt2.PrimaryKey = dt2.columns[0];
  3. ForeignKeyConstraint fk = new ForeignKeyConstraint(dt1.columns[0],dt2.columns[0]);
  4. fk.UpdateRule = Rule.Cascade;
  5. fk.DeleteRule = Rule.SetNull;
  6. dt1.Constraints.Add(fk);

(3)DataSet方面还要注意bind和GetChange等几个方法

 

这里只是对.NET数据访问进行一个小小的概要,很多东西都没有写的深入,如果存在错误,请给予指出。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值