溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解ADO.NET無連接模式

發(fā)布時(shí)間:2021-10-09 09:47:15 來源:億速云 閱讀:120 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“如何理解ADO.NET無連接模式”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

無連接模式:可以在沒有打開連接時(shí)在內(nèi)存中操作數(shù)據(jù),DataAdapter通過管理連接為無連接模式提供服務(wù),當(dāng)要從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)時(shí),DataAdapter打開一個(gè)連接,填充指定的DataSet,等數(shù)據(jù)讀取完馬上自動(dòng)關(guān)閉連接,然后可以對(duì)數(shù)據(jù)做修改,再次使用DataAdapter打開連接,持久化修改(無論是更新,刪除或是更新),最后自動(dòng)關(guān)閉連接,使用無連接模式的情況是有一些獨(dú)立數(shù)據(jù),它們不會(huì)發(fā)生改變或者很少改變,因?yàn)樵趯⑻畛銬ataSet和更新數(shù)據(jù)這段時(shí)間內(nèi)數(shù)據(jù)庫(kù)中的實(shí)際數(shù)據(jù)也許會(huì)發(fā)生改變,如果需要將數(shù)據(jù)立即持久化到數(shù)據(jù)庫(kù)請(qǐng)使用連接模式

讀取數(shù)據(jù)到DataSet:無連接意味著一個(gè)連接建立了一個(gè)與數(shù)據(jù)庫(kù)的會(huì)話,請(qǐng)求的數(shù)據(jù)讀入到DataSet中,然后通過斷開數(shù)據(jù)庫(kù)的連接關(guān)閉會(huì)話,這時(shí)會(huì)話因?yàn)榕c數(shù)據(jù)庫(kù)的斷開而關(guān)閉,DataSet成為一個(gè)無連接的數(shù)據(jù)庫(kù)

復(fù)制代碼 代碼如下:

/// <summary>
      /// 查詢學(xué)生信息
      /// </summary>
      /// <returns>返回填充了學(xué)生表的DataSet</returns>
      public DataSet GetUserInfor()
      {
          string str = "Data Source=.;Initial Catalog=Student;Integrated Security=True";
          var conn = new SqlConnection(str);
          DataSet ds = new DataSet();
          var sda = new SqlDataAdapter("SELECT * FROM Student",conn);
          sda.Fill(ds, "student");//調(diào)用fill方法時(shí),SqlDataAdapter會(huì)自動(dòng)打開連接,讀取數(shù)據(jù)然后關(guān)閉連接
          foreach (DataRow dr in ds.Tables["student"].Rows)
          {
              Console.WriteLine(dr["name"]);
          }
          return ds;
      }

將DataSet的修改保存到數(shù)據(jù)庫(kù)
插入數(shù)據(jù)

復(fù)制代碼 代碼如下:

/// <summary>
      /// 插入學(xué)生信息,并返回插入后的DataSet
      /// </summary>
      /// <param name="stu">學(xué)生實(shí)體類</param>
      public DataSet InsertStudnt(Student stu)
      {
          DataSet ds = GetUserInfor();
          string str = "Data Source=.;Initial Catalog=Student;Integrated Security=True";
          string sql = "INSERT INTO student VALUES (@name,@age)";
          var conn = new SqlConnection(str);
          var cmd = new SqlCommand(sql,conn);
          var sda = new SqlDataAdapter();
          SqlParameter sqlParam1 = new SqlParameter()
          {
              ParameterName = "@name",
              SourceColumn = "name"
          };
          SqlParameter sqlParam2 = new SqlParameter()
          {
              ParameterName = "@age",
              SourceColumn = "age"
          };
          SqlParameter[] sqlParamArray = new SqlParameter[] {sqlParam1,sqlParam2 };
          cmd.Parameters.AddRange(sqlParamArray);
          sda.InsertCommand = cmd;
          DataRow dr = ds.Tables["student"].NewRow();
          dr["name"] = stu.name;
          dr["age"] = stu.age;
          ds.Tables["student"].Rows.Add(dr);
          sda.Update(ds,"student");
          return ds;

      }

更新數(shù)據(jù)

復(fù)制代碼 代碼如下:

/// <summary>
      /// 根據(jù)ID更新姓名和年齡
      /// </summary>
      /// <param name="name">姓名</param>
      /// <param name="age">年齡</param>
      /// <param name="id">學(xué)生ID</param>
      /// <returns>返回更新后的DataSet</returns>
      public DataSet UpdateStudent(Student stu,int id)
      {
          DataSet ds = GetUserInfor();
          string str = "Data Source=.;Initial Catalog=Student;Integrated Security=True";
          string sql = "UPDATE student SET name=@name,age=@age WHERE id=@id";
          var conn = new SqlConnection(str);
          var cmd = new SqlCommand(sql, conn);
          var sda = new SqlDataAdapter();
          SqlParameter param1 = new SqlParameter()
          {
              ParameterName="@name",SourceColumn="name"
          };
          SqlParameter param2 = new SqlParameter()
          {
              ParameterName = "@age",
              SourceColumn = "age",
              SqlDbType=SqlDbType.Int
          };
          SqlParameter param3 = new SqlParameter()
          {
              ParameterName = "@id",
              SourceColumn = "id"
          };
          SqlParameter[] param = new SqlParameter[] {param1,param2,param3 };
          cmd.Parameters.AddRange(param);
          sda.UpdateCommand = cmd;
          DataTable dt = ds.Tables["student"];
          foreach (DataRow dr in dt.Rows)
          {
              int oldID=Convert.ToInt32(dr["id"]);
              if (oldID == id)
              {
                  dr["name"] = stu.name;
                  dr["age"] = stu.age;
              }
          }
          sda.Update(ds,"student");
          return ds;
      }

刪除數(shù)據(jù)

復(fù)制代碼 代碼如下:

/// <summary>
      /// 根據(jù)ID刪除一個(gè)學(xué)生
      /// </summary>
      /// <param name="id">返回更新后的DataSet</param>
      public DataSet DeleteStudent(int id)
      {
          DataSet ds = GetUserInfor();
          string str = "Data Source=.;Initial Catalog=Student;Integrated Security=True";
          string sql = "DELETE FROM student WHERE id=@id";
          var conn = new SqlConnection(str);
          var cmd = new SqlCommand(sql, conn);
          var sda = new SqlDataAdapter();
          SqlParameter param = new SqlParameter()
          {
              ParameterName="@id",SourceColumn="id",SqlDbType=SqlDbType.Int
          };
          cmd.Parameters.Add(param);
          sda.DeleteCommand = cmd;
          DataTable dt=ds.Tables["student"];
          foreach (DataRow dr in dt.Rows)
          {
              int oldId = Convert.ToInt32(dr["id"]);
              if (oldId == id)
                  dr.Delete();
          }
          sda.Update(ds,"student");
          return ds;
      }

“如何理解ADO.NET無連接模式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI