`
isiqi
  • 浏览: 16000703 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ADO.NET:(2) 执行命令

 
阅读更多

是ADO.NET有以下几种方法来执行一个命令:
(1) ExecuteNonQuery() -- 无结果返回。通常用于 UPDATE, INSERT 和 DELETE命令,可以返回有几行受到影响
(2) ExecuteReader() -- 返回结果 IDataReader。返回一个数据集,比如 SELECT * FROM ACCOUNT
(3) ExecuteScalar() -- 返回第一行第一列的数据。通常用于返回单一数据,比如 SELECT COUNT(*) FROM ACCOUNT
(4) ExecuteXmlReader() -- 返回XmlReader对象。只适用于SQL数据库。T-SQL支持对SELECT进行FOR XML扩展,其中包括三种扩展(FOR XML AUTO, FOR XML RAW, FOR XML EXPLICIT),具体含义可以参看其他参考资料。

下面来分别看一下以上几个方法的使用例子:

            string select = "INSERT INTO [TestDatabase].[dbo].[Account]" +
                            "([accountid]" +
                            ",[name])" +
                            "VALUES" +
                            "(newid()" +
                            ",'microsoft')";
            SqlCommand cmd = new SqlCommand(select, conn);
            int rowsReturned = cmd.ExecuteNonQuery();
            string select = "SELECT [accountid]" +
                            ",[name]" +
                            "FROM [TestDatabase].[dbo].[Account]";
            SqlCommand cmd = new SqlCommand(select, conn);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(reader[1]);
            }
            string select = "SELECT COUNT(*) FROM [TestDatabase].[dbo].[Account]";
            SqlCommand cmd = new SqlCommand(select, conn);
            object o = cmd.ExecuteScalar();
            Console.WriteLine(o);
            string select = "SELECT [accountid]" +
                                ",[name]" +
                                "FROM [TestDatabase].[dbo].[Account] FOR XML AUTO";
            SqlCommand cmd = new SqlCommand(select, conn);
            XmlReader xr = cmd.ExecuteXmlReader();
            xr.Read();
            string data;
            do
            {
                data = xr.ReadOuterXml();
                if (!string.IsNullOrEmpty(data))
                    Console.WriteLine(data);
            } while (!string.IsNullOrEmpty(data));


下面再看几个对存储过程调用的例子。下面的两个例子中,两个存储过程分别是一个简单的UPDATE和DELETE操作,所以我们可以使用ExecuteNonQuery:

CREATE PROCEDURE [dbo].[UpdateAccountWebsite] (@AccountName NCHAR(50), @Website NCHAR(50))
AS
BEGIN
	SET NOCOUNT ON;
    UPDATE Account Set website = @Website WHERE name = @AccountName
END
            SqlCommand cmd = new SqlCommand("UpdateAccountWebsite", conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@AccountName", "apple");
            cmd.Parameters.AddWithValue("@Website", @"www.apple.com");
            cmd.ExecuteNonQuery();
CREATE PROCEDURE [dbo].[DeleteAccountByName](@AccountName NCHAR(50))
AS
BEGIN
	SET NOCOUNT ON;
    DELETE Account WHERE name = @AccountName
END
            SqlCommand cmd = new SqlCommand("DeleteAccountByName", conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@AccountName", "apple");
            cmd.ExecuteNonQuery();


如果存储过程带有返回参数的话:

CREATE PROCEDURE [dbo].[InsertNewAccount](@AccountName NCHAR(50), @Website NCHAR(50), @AccountId Uniqueidentifier = null OUTPUT	
AS
BEGIN
	SET NOCOUNT ON;
	DECLARE @NEWID Uniqueidentifier
	SET @NEWID = NEWID()
	SELECT @AccountId = @NEWID
	INSERT INTO [TestDatabase].[dbo].[Account]
           ([accountid]
           ,[name]
           ,[website])
     VALUES
           (@NEWID
           ,@AccountName
           ,@Website) 
END
            SqlCommand cmd = new SqlCommand("InsertNewAccount", conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@AccountName", SqlDbType.NChar, 50));
            cmd.Parameters.Add(new SqlParameter("@Website", SqlDbType.NChar, 50));
            cmd.Parameters["@AccountName"].Value = "google";
            cmd.Parameters["@Website"].Value = "www.google.com";
            cmd.Parameters.Add(new SqlParameter("@AccountId", SqlDbType.UniqueIdentifier, 0, 
                ParameterDirection.Output, false, 0, 0, "RegionID", DataRowVersion.Default, null));

            
            cmd.ExecuteNonQuery();
            Guid newaccountid = (Guid)cmd.Parameters["@AccountId"].Value;

假如存储过程还要返回一组数据的话:

CREATE PROCEDURE [dbo].[InsertNewAccount2](@AccountName NCHAR(50), @Website NCHAR(50))	
AS
BEGIN	
	SET NOCOUNT ON;
	DECLARE @NEWID Uniqueidentifier
	SET @NEWID = NEWID()
	INSERT INTO [TestDatabase].[dbo].[Account]
           ([accountid]
           ,[name]
           ,[website])
     VALUES
           (@NEWID
           ,@AccountName
           ,@Website) 
    SELECT * FROM [TestDatabase].[dbo].[Account] WHERE accountid = @NEWID
END
            SqlCommand cmd = new SqlCommand("InsertNewAccount2", conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@AccountName", SqlDbType.NChar, 50));
            cmd.Parameters.Add(new SqlParameter("@Website", SqlDbType.NChar, 50));
            cmd.Parameters["@AccountName"].Value = "google";
            cmd.Parameters["@Website"].Value = "www.google.com";

            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                reader.GetGuid(0);
                Console.WriteLine(reader[0]);
            }
分享到:
评论

相关推荐

    ADO.NET连接环境中访问数据_执行命令读取数据

    ADO.NET连接环境中访问数据_执行命令读取数据 ppt

    ADO.NET本质论.pdf

    8.3.3 执行命令、返回结果和使用openrowset 8.3.4 command的最终格式和行为 8.3.5 command dialect 8.3.6 层次化数据 8.3.7 从rowset更新 8.3.8 错误 8.3.9 不支持的功能 8.3.10 支持和不...

    ado[1].net中文手册 学习 ado.net的重要资料

    执行命令:描述 ADO.NET Command 对象,并说明如何使用它来对数据源执行查询和命令。 使用 DataReader 检索数据:描述 ADO.NET DataReader 对象,并说明如何使用它从数据源返回结果流。 将存储过程用于命令:描述如何...

    《零基础学ASP.NET 2.0》第13章 ADO.NET 2.0对象

    13.1 ADO.NET 2.0概述 211 13.1.1 ADO.NET 2.0的新特性 211 13.1.2 ADO.NET中的对象 212 13.2 Connection对象 212 ...13.7.2 使用Command对象来执行SQL命令应注意什么 245 13.7.3 DataSet对象太复杂了 245

    ADO.NET管理数据库

    二、实验要求 1、程序结构清晰、语句完整; 2、格式正确,语句采用缩进格式; 3、编译、连接通过,熟练使用命令键; 4、运行结果正确,输入输出有提示,格式美观。

    ADO.NET 数据库课程资源

    ADO.NET 包含用于连接到数据库、执行命令和检索结果的 .NET Framework 数据提供程序。 这些结果或者被直接处理,放在 ADO.NET DataSet 对象中以便以特别的方式向用户公开,并与来自多个源的数据组合;或者在层之间...

    ado.net 中文手册(html)

    使用 ado.net 连接到数据源 执行命令 使用datareader检索数据 将存储过程用于命令 从数据库中获取单个值 从数据库中获取blob 值 执行数据库操作和修改数据 从sql server中以xml形式...

    ADO.NET连接数据库

    ADO.NET 的功能是什么? 连接数据库使用什么对象? 执行 SQL 命令使用什么对象? 了解 ADO.NET 的功能和组成 会使用 Connection 对象连接到数据库 会使用 Command 对象查询单个值

    ADO.NET快速掌握

    ADO.NET由两个部分组成:.NET数据提供程序和数据集(DataSet) .NET数据提供程序包括4个核心对象: Connection对象,用来建立数据库连接; Command对象,用来对数据库执行命令; DataReader对象,用来从数据库中获取...

    剖析ADO.NET批处理更新

    ADO.NET应用程序和基础数据源之间的交互基于一个具有双向信道的双体系结构。您可以使用各个特定于提供程序的命令或批处理更新过程来访问数据源,以读取和写入行。在这两种情况下,数据访问都会产生完全双向绑定,并...

    ADO.net学习笔记

    1. net 的四个核心的对象 Connection 建立与特定数据源的连接 Command 对数据源执行命令 DataReader 从数据源中读取只进且只读的数据流 DataAdapter 将数据填充到DataSet中去 包含在System.Data.SqlClient命名空间中...

    剖析ADO.NET批处理更新(深入研究数据访问)

    ADO.NET应用程序和基础数据源之间的交互基于一个具有双向信道的双体系结构。您可以使用各个特定于提供程序的命令或批处理更新过程来访问数据源,以读取和写入行。在这两种情况下,数据访问都会产生完全双向绑定,并...

    ADO数据库编程【强烈推荐】

    1. ADO.NET概述 ...数据供应器用于连接数据库,执行数据操作命令等。数据集则提供了一个与数据源无关的数据表示方式。使用数据供应器对数据库操作后的结果可以直接被处理,也可以放到数据集对象中。

    ASP.NET高级编程:读取校园BBS数据库数据.pptx

    项目一:使用ADO.NET技术实现校园BBS;01/;; Command对象 实现对数据库执行T-SQL语句或存储过程 Command对象的常用 属性;Command对象的常用 方法;基本步骤 打开到数据库连接。 创建新的Command对象。 定义T-SQL命令。...

    北京中科信软 Visual Basic.NET培训

    执行数据操作命令 DataReader DataSet ADO.NET中的数据更新 多活动结果集 批量复制 ADO.NET中的异步处理 事务处理机制 LINQ 案例分析:采用N层架构和分布式的大型图书系统 四 Web应用(ASP.NET&XML; ...

    SqlHelper ado.net

    这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

    亮剑.NET深入体验与实战精要2

    5.2.1 执行命令方法的封装 217 5.2.2 查询数据方法的封装 220 5.2.3 数据统计方法的封装 221 5.2.4 实现SqlParameter方式 222 5.2.5 实现多数据库的访问 223 5.3 常用经典SQL语句 224 5.4 事务处理 226 5.4.1 SQL和...

Global site tag (gtag.js) - Google Analytics