使用 Visual C# .NET 从数据集对象更新数据库

利用window.getSelection()来选中放大阅读器 今天没有找到什么问题。。就找了个别人想做的小demo,然后恬不知耻的做了下来。 光标选中的字符更改样式 哈哈,一开始听到又是懵的,好像不太可能,人家文本都是一个pre或者span里储存的,你要把他变成一个字一个span么,当然大家可能都是这么想的。。虽然想法很可笑。不过有个比较重要的思路在里面,就是利用分割来完成这一系列的操作。 对,一个标签里面的文字出现两种状态,按照我现在的能... 阅读详情

本任务的内容

概要

数据集对象是 Microsoft .NET 框架中数据访问的关键部分,是可保存表、视图和关系的内存中对象。本文介绍了如何获取包含数据(从数据库加载)的 数据集、如何修改此数据,以及接着如何再将其发回数据库以更新原始数据源。

返回页首

要求

下表概括了推荐使用的硬件、软件、网络结构以及所需的服务包:
  • Microsoft Windows 2000 Professional、Microsoft Windows 2000 Server、Microsoft Windows 2000 Advanced Server 或 Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server 7.0 版、Microsoft SQL Server 2000 或安装了 PUBS 示例数据库的 Microsoft Data Engine (MSDE)
  • Microsoft Visual Studio .NET
本文假定您熟悉以下主题:
  • 数据库技术
  • 结构化查询语言 (SQL)
返回页首

如何从数据集对象更新数据库

本节演示如何使用 数据集对象更新数据库中的数据。还可以使用 SqlCommand 对象直接在数据库中插入、更新和删除数据,记住这一点很重要。

如想更好地理解本文,请单击下面的文章编号以查看 Microsoft 知识库中的文章:
  • 314145 HOW TO: Populate a DataSet Object from a Database by Using Visual C# .NET(使用 Visual C# .NET 从数据库填充数据集对象)
314145 一文中讲述了如何从数据库检索数据和将此数据传送到 数据集中,并讲述了为什么 数据集独立于数据库以及它与数据库有何区别。

加载 数据集后,就可以修改数据了。 数据集将跟踪这些更改。 可将 数据集对象视为从数据库检索出的缓存于内存中的数据。 数据集对象由一个包含表、关系和约束的集合构成。

若要更新 数据集并将这些更新发回数据库,请按照下列步骤操作:
  1. 打开 Microsoft Visual Studio .NET。
  2. 在 Visual C# .NET 中新建一个控制台应用程序。 Visual Studio 在默认情况下将创建一个静态类和一个空的 Main() 过程。
  3. 确保该项目包含对 System System.Data 命名空间的引用。对 SystemSystemData System.Data.SqlClient 命名空间使用 using 语句,这样,在后面的代码中就不需要限定这些命名空间中的声明了。必须在任何其他声明之前使用这些语句。
    using System;
    using System.Data;
    using System.Data.SqlClient;
  4. 在修改数据并将更改发回数据库之前,必须将该信息加载到 DataSet (数据集)中。 有关详细过程,请参见314145。为避免重复,将不详细提供该步骤中的代码。

    以下代码中的连接字符串指向其“sa”帐户具有空密码的本地计算机(或运行这段代码的计算机)上的 SQL Server。如果需要的话,请用您自己的设置替换该字符串。总之,先创建连接,然后创建数据适配器;该适配器用于将数据填充到 DataSet 中。
    string sConnectionString;
    
    // Modify the following string to correctly connect to your SQL Server.
    sConnectionString = "Password=;User ID=sa;"
    	+ "Initial Catalog=pubs;"
    	+ "Data Source=(local)";
    
    SqlConnection objConn
    	= new SqlConnection(sConnectionString);
    objConn.Open();
    
    // Create an instance of a DataAdapter.
    SqlDataAdapter daAuthors 
    	= new SqlDataAdapter("Select * From Authors", objConn);
    
    // Create an instance of a DataSet, and retrieve data from the Authors table.
    DataSet dsPubs = new DataSet("Pubs");
    daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
    daAuthors.Fill(dsPubs,"Authors");
  5. 现在已经加载了数据,您可以对其进行修改。添加行(或记录)有多种方法。该代码示例使用一个三步式过程:
      • DataTable 获取一个新的 DataRow 对象。
      • 根据需要设置 DataRow 字段的值。
      • 将新对象传递到 DataTable.Rows 集合的 Add 方法中。

    将以下代码粘贴到第 4 步中的代码的后面:
    //****************
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"];
    
    DataRow drCurrent;
    // Obtain a new DataRow object from the DataTable.
    drCurrent = tblAuthors.NewRow();
    
    // Set the DataRow field values as necessary.
    drCurrent["au_id"] = "993-21-3427";
    drCurrent["au_fname"] = "George";
    drCurrent["au_lname"] = "Johnson";
    drCurrent["phone"] = "800 226-0752";
    drCurrent["address"] = "1956 Arlington Pl.";
    drCurrent["city"] = "Winnipeg";
    drCurrent["state"] = "MB";
    drCurrent["contract"] = 1;
    
    // Pass that new object into the Add method of the DataTable.
    tblAuthors.Rows.Add(drCurrent);
    Console.WriteLine("Add was successful, Click any key to continue!!");
    Console.ReadLine();
    
    // END ADD CODE  
  6. 将以下代码粘贴到第 4 步中的代码的后面:若要编辑现有行,请获取相应的 DataRow 对象,然后为一列或多列提供新值。必须先找到正确的行,由于您加载了表的架构和数据(在第 4 步中对 FillSchema 的调用),因此这一过程非常简单。有了架构,表就知道哪个列是它的主键,同时 Rows 集合的 Find 方法也就可用了。
    Find 方法将返回 DataRow 对象,此对象的主键(在本例中为 au_id)已有了一个具体的值。有了该 DataRow 之后,您就可以修改列了。您无需包装 BeginEdit EndEdit 中的修改,但进行包装可简化 DataSet 必须完成的工作,并且使 DataSet 可以在调用 EndEdit 的同时执行它的验证检查。将以下代码粘贴到 ADD 代码之后:
    //*****************
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors.Rows.Find("213-46-8915");
    drCurrent.BeginEdit();
    drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
    drCurrent.EndEdit();
    Console.WriteLine("Record edited successfully, Click any key to continue!!");
    Console.ReadLine();
    
    // END EDIT CODE  
  7. 将以下代码粘贴到第 4 步中的代码的后面:若要用所有这些更改更新原数据库,请将 DataSet 传递到 DataAdapter 对象的 Update 方法中。

    但是,在您调用 Update 前,必须设置 DataAdapter 对象的 InsertCommandUpdateCommandDeleteCommand 属性。可手动编写 SQL 并用相应的 SqlCommand 对象填充这三个属性,但也可以使用 Visual Studio .NET 自动生成这三个命令。

    若要在需要时生成所需的命令,必须创建 SqlCommandBuilder 对象的实例并在构造函数中使用 DataAdapter。如果想使用此方法(在以下代码示例中阐释),您的表必须有主键信息。若要访问主键信息,请调用 FillSchema,然后将 DataAdapter MissingSchemaAction 属性设置为 AddWithKey,或在代码中手动设置主键。将以下代码粘贴到 EDIT 代码之后:
    //*****************
    // BEGIN SEND CHANGES TO SQL SERVER 
    
    SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors);
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();
    
    // END SEND CHANGES TO SQL SERVER
  8. 将以下代码粘贴到第 4 步中的代码的后面:若要完全删除某一行,请使用 DataRow 对象的 Delete 方法。请注意,Rows 集合包含 Remove RemoveAt 两个方法,它们似乎可以删除行,而实际上只是从集合中移除行。只有 Delete 方法才会将删除结果发回源数据库中。将以下代码粘贴到 SEND CHANGES TO SQL SERVER 代码之后:
    //*****************
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors.Rows.Find("993-21-3427");
    drCurrent.Delete();
    Console.WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console.ReadLine();
    
    //END DELETE CODE 
  9. 将以下代码粘贴到第 4 步中的代码的后面:将这些更改发送到 SQL Server 以移除早先添加的记录。将以下代码粘贴到 DELETE 代码之后:
    //*****************
    // CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();
  10. 将以下代码粘贴到第 4 步中的代码的后面:保存项目。
  11. 将以下代码粘贴到第 4 步中的代码的后面:在调试菜单上,单击开始以运行该项目。请注意,将出现几个消息框,它们指示代码的执行进度并让您能够在执行过程中查看数据的当前状态。
返回页首

完整代码列表

using System;
using System.Data;
using System.Data.SqlClient;

namespace PopulateDataSet
{

/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
    {
static void Main(string[] args)
        {
            string sConnectionString;

// Modify the following string to correctly connect to your SQL Server.
            sConnectionString = "Password=;User ID=sa;"
                + "Initial Catalog=pubs;"
+ "Data Source=(local)";

            SqlConnection objConn
                = new SqlConnection(sConnectionString);
objConn.Open();

// Create an instance of a DataAdapter.
            SqlDataAdapter daAuthors 
= new SqlDataAdapter("Select * From Authors", objConn);

            // Create an instance of a DataSet, and retrieve 
            // data from the Authors table.
            DataSet dsPubs = new DataSet("Pubs");
            daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
            daAuthors.Fill(dsPubs,"Authors"); 
            //****************
// BEGIN ADD CODE 
// Create a new instance of a DataTable.
            DataTable tblAuthors;
tblAuthors = dsPubs.Tables["Authors"];

            DataRow drCurrent;
// Obtain a new DataRow object from the DataTable.
drCurrent = tblAuthors.NewRow();

// Set the DataRow field values as necessary.
drCurrent["au_id"] = "993-21-3427";
drCurrent["au_fname"] = "George";
drCurrent["au_lname"] = "Johnson";
drCurrent["phone"] = "800 226-0752";
drCurrent["address"] = "1956 Arlington Pl.";
drCurrent["city"] = "Winnipeg";
drCurrent["state"] = "MB";
drCurrent["contract"] = 1;

            // Pass that new object into the Add method of the DataTable.
tblAuthors.Rows.Add(drCurrent);
            Console.WriteLine("Add was successful, Click any key to continue!!");
Console.ReadLine();

// END ADD CODE   
            //*****************
// BEGIN EDIT CODE 

drCurrent = tblAuthors.Rows.Find("213-46-8915");
drCurrent.BeginEdit();
drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
drCurrent.EndEdit();
            Console.WriteLine("Record edited successfully, Click any key to continue!!");
Console.ReadLine();
			
// END EDIT CODE   
            //*****************
// BEGIN SEND CHANGES TO SQL SERVER 

            SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors);
daAuthors.Update(dsPubs, "Authors");
            Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
Console.ReadLine();
			
// END SEND CHANGES TO SQL SERVER 
            //*****************
//BEGIN DELETE CODE 

drCurrent = tblAuthors.Rows.Find("993-21-3427");
drCurrent.Delete();
            Console.WriteLine("SRecord deleted successfully, Click any key to continue!!"); 
Console.ReadLine();
       
//END DELETE CODE  
            //*****************
// CLEAN UP SQL SERVER
daAuthors.Update(dsPubs, "Authors");
            Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
Console.ReadLine();         	
			
        }
    }
}
返回页首

参考

有关使用 ADO.NET、 数据集对象和 SQL 的更多信息,请访问以下 Microsoft Web 站点:

深入了解数据访问(MSDN 之音专栏)
http://msdn.microsoft.com/voices/data.asp

ADO.NET 与 ADO 编程人员
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/adonetprogmsdn.asp

MSDN Online .NET 开发人员中心
http://msdn.microsoft.com/net

半导体物理-Si晶体生长方向<2> Si(硅)晶体的生长方向是一个重要的概念,尤其在半导体工业中。这个概念涉及到晶体在生长过程中原子排列的方向,对晶体的性质和应用有重大影响。让我为您详细解释:理解Si晶体的生长方向对于半导体材料的研究和应用非常重要,它直接影响了最终器件的性能和制造工艺。在实际应用中,选择适当的生长方向可以优化器件性能,提高产品质量。 阅读详情

相关推荐

【kafka】控制台默认不能发送大数据 4096 4095 4129

1.概述 因为某些原因,需要做一个测试,然后我想往topic中,发送一条消息,然后再消费它。但是消息有点大,一条消息是36K. 消费者 [root@1 kafka]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic xxx.devicealarm | grep 网络攻击 生产者,生产者发送了一个消息消息是一个json,json中有这个数据特征 网络攻击 [root@1 kafka]# bin/kafka-console-p

九师兄 565

dataset中的数据更新数据库

,C#使用TheSQL Server .NET Data Provider中的SqlDataAdapter填充DataSet的具体实现方法:   代码清单01: SqlConnection sqlConnection1 = new SqlConnection ( "Data Source=localhost ;Integrated Security=SSPI ;

kankankankan2222的专栏 6880

5口网络交换机芯片KSZ8995MAI ALTIUM设计原理图库+3D PCB封装文件.zip

5口网络交换机芯片KSZ8995MAI ALTIUM设计原理图库+3D PCB封装文件, PcbLib+SchLib格式,Altium Designer原理图库+PCB封装库文件,已在项目中验证使用,可作为你产品设计的参考也可以直接应用到你的项目设计中。

关于利用DataSet更新数据库数据的问题

1、原理:利用DataRowState的状态来判定增删改 2、往DataTable表中加入行数据时有Add和Import()方式,其中Add()新增新行,Import()在别的表已存在的行 3、两张一样的表,想统一到一张表中进行更新数据,不能单纯的使用Import(),因为不知道Import的DataRow的DataRowState,可以利用先AcceptChanges(),然后判断该行具体的状态,利用SetModified()、SetAdded()、Delete(),设置DataRowState。 .

风若寒 1398

如何使用 Visual C# .NETDataSet 对象更新数据库

正文内容链接:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;307587#kb1

iwainfo的专栏 1281

C#实现用DataSet更新数据库

  好像从Excel中读取出来的DataSet不能用这种方法更新,还没找到原因,希望能尽快解决。/**////         /// 用DataSet更新数据库        ///         /// 用于更新数据库的数据源DataSet        /// 用于更新数据库的数据源表DataTable        /// 初始化SqlDataAdapter.SelectComm

holyrong的专栏 6797

使用 window.getSelection() 方法获取鼠标划取部分的起始位置和结束位置的问题

乔布斯掌权时代的iPhone以精湛的做工受到广泛的关注,也受到了大量的果粉追捧。iPhone4S的黄金尺寸设计,再到iPhone5s的巅峰状态,但是iPhone6的横空出世似乎打破了苹果公司在工艺方面的追求。虽然iPhone6及其iPhone6 Plus的销量比前几代产品都要高 (原因受安卓大屏冲击的影响,果粉对大屏手机的欲望愈加的浓烈),但是收到广泛吐槽也是最多的。大白条,尤其是突出的摄像头,乔

xiangshui021的博客 3949

使用 window.getSelection() 方法获取鼠标划取部分的起始位置和结束位置的问题(高亮后不能正确获取)...

如果没有高亮等复杂处理,只需要获取一段文字中选取的字和位置,那么 使用window.getSelection()获取div中选中文字内容及位置 怎么获取textarea中选中文字 则可以满足需求; --------------------------------------------------------------------------------------------高级...

weixin_33922670的博客 1381

Window.getSelection

使用 window.getSelection() 方法获取鼠标划取部分的起始位置和结束位置 返回一个Selection对象,表示用户选择的文本范围或光标的当前位置。 const selection = window.getSelection() ; selection是一个Selection对象。 如果想要将selection转换为字符串,可通过连接一个空字符串...

weixin_30301449的博客 795

使用window.getSelection()获取div中选中文字内容及位置

div添加一个弹出事件: $(document).ready(function () { $("#marked-area").mouseup(function (e) { $scope.mark.saveSelectionText(); }); }); ...

weixin_34290352的博客 1911

Vue 鼠标选中文本 @mouseup 结合 window.getSelection().toString()

Vue 鼠标选中文本 @mouseup 结合 window.getSelection().toString() <h2 @mouseup="handleMouseSelect">Vue鼠标选中文本,使用 mouseup 结合 js</h2> methods: { handleMouseSelect() { let text = window.getSelection().toString() console.log(text) } } ...

sunshineTing2的博客 5095

window.getSelection 实现的原理是什么

是浏览器提供的一个内置对象,它提供了一系列方法和属性来操作和获取选区的信息。通过选区对象,你可以获取选区的起始位置和结束位置、选区包含的文本内容等。如果用户没有选择文本或选择了其他内容(如图片、表格等),则返回的选区对象可能为空或不包含文本内容。它返回一个 Selection 对象,该对象包含了当前选择文本的相关信息。当用户通过鼠标或键盘进行文本选择时,浏览器会创建一个选区对象来表示所选内容的范围和位置。方法可以获取到选区对象,然后通过选区对象的方法和属性来访问和操作选区的内容和位置信息。

qq_42816270的博客 694

关于window.getSelection

文章目录selection对象术语属性方法 window.getSelection(),返回一个Selection对象,表示用户选择的文本范围或光标的当前位置。 selection对象 先来看下面两个selection结果: selection对象一: selection对象二: 很奇怪,为什么同样选中一段文字,为什么selection对象的属性会不一样呢? 那就需要明确一下Selection...

xiaoxu的博客 3万+

使用window.getSelection 或document.selection.createRange()获取鼠标选中的内容;

使用window.getSelection()获取div中选中文字内容及位置 οnmοuseup=function () { if (window.getSelection) {              var text = window.getSelection().toString(); //选中文字              v...

boss_way的博客 2440

window.getSelection

开发中,时常会遇到一个开发场景。当我们在编辑一个富文本的时候。当用户选择了某些文字。我们需要弹出一个窗,让用户选择是否把它变成可粗体,比如下面这个图 当然,今天不会直接敲出这个效果,而是解析下而已。毕竟敲出来对新手不友好,需要给予更多的时间思考 通过测试多次。我们发现了几个问题, 1.触发这事件的效果,是需要在鼠标起来的时候触发。 2.鼠标起来的时候,如果被选中的包含太多了。比如多个元素,则不显示操作 简单版本就只有这两点,更复杂的效果是还要考虑类似‘ctrl’+‘A’时的情况 对于上述问题,第一点,使用

胡世林的博客 1452

获取鼠标点击的地方,并插入文本。window.getSelection()

前言:因项目需求,有一个富文本框,点击页面的插入姓名,会在富文本框内的鼠标处,插入姓名。 解决:利用window.getSelection() 来获取富文本框的焦点,并保存下来,在点击插入姓名时,在再那个焦点处插入。 EX: 注:因为项目是vue 写的,所以有些变量需要自己在data 里免定义 在富文本框内点击的时候保存一下焦点   this.sel ;isWang 是判断插入的时候,富文...

qq_40247562的博客 2393

文本选择window.getSelection

8.文本选择window.getSelection例 1.8(文本选择IEFF.html)<html><head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <script type="text/javascript"> funct...

mark_to_win的专栏 729

div可编辑,插入元素获取光标,getSelection()对象操作

div可编辑,插入元素,获取光标位置,设置光标位置

m0_67108146的博客 3107

JS获取鼠标光标位置并在光标位置添加内容

JS获取鼠标光标位置并插入内容

About_zero的博客 4820
上一篇: 准备好好利用这个地方?
下一篇: c#.net函数列表
zyzhou
博客等级 码龄25年 0粉丝 18原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值