zoukankan      html  css  js  c++  java
  • C#中使用ExecuteReader, ExecuteNonQuery, ExecuteScalar

    ExecuteReader:可以读一个表的记录,只能读不能写

    ExecuteNonQuery:可以写也可以读

    ExecuteScalar:只能读一条记录,一般用来判断数据库是否有数据等,只能读不能写

    ExecuteNonQuery():这个可以让我们在更新数据库时不使用 DataSet 而使用 ExecuteNonQuery 更改数据库中的数据。通过执行 UPDATEINSERTDELETE SQL语句就 可以达到更改数据库中的数据目的。即使 ExecuteNonQuery 不返回任何行,映射到参数的输 出参数或返回值仍然使用数据填充。但对于 UPDATE、INSERT 和 DELETE SQL语句,返回的 值就是受ExecuteNonQuery()命令影响的行数。对其它类型的语句以及回退来说,返回的值 都是 -1。

    public void CreateDatabaseAsCopy(string sourceDatabase, string destDatabase, string connectionString)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = string.Format(RestoreSQLString, destDatabase, sourceDatabase);
                        cmd.ExecuteNonQuery();
                        Logger.Info(string.Format("Create database {0} as copy of {1}", destDatabase, sourceDatabase));
                    }
                }
            }
    View Code

       ExecuteReader():我们通常在asp中用Recordset对象来从数据库中读出数据,并且用 循环语句来一个一个的读出数据,但在我们的ADO.NET中,我们就是用DataReader 对象的 ExecuteReader()方法来进行数据的列出,并且我们用这个ExecuteReader()方法来显示数据 是最快的一种方法,因为当我们在用ExecuteReader()方法中的DataReader 对象来进行数据显示时,他只可以一条一条向前读,不能返回,也就是像ASP中的ADO方法 中的Recordset 对象的Movenext一样,他没有move -1这样的返回方法。

    private const string CheckDatabaseFullName = "Select name from sys.databases where create_date>@datetime and name like N'PartitionMaster_Backup%' order by create_date";
    
    public string GetBackupedPartitionMasterDatabase()
            {
                using (SqlConnection conn = new SqlConnection(MasterConnectionString))
                {                
                    DateTime dt = DateTime.Now.AddHours(-12).ToUniversalTime();                
                    conn.Open();
                    string name = null;
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        //cmd.CommandText = string.Format(CheckDatabaseFullName, database);
                        cmd.CommandText = CheckDatabaseFullName;
                        cmd.Parameters.Add("@datetime", SqlDbType.DateTime);
                        cmd.Parameters[0].Value = dt;
    
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                name = reader["name"].ToString();
                                Logger.Info(string.Format("Database: {0} exists", name));
                            }
                        }
                    }
    
                    return name;
                }
            }
    View Code

        ExecuteScalar():这种CMD相当于我们在ADO中用SQL语句中使用一些计算函数的功 能一样,在这里我们只是返回所有影响的行数的第一行第一列数据,这样也就是相当于专业 为我们的如:select count(*) from database的功能一样,我们可以用

    string sql="select * from  table"

    SqlCommand cmd=SqlCommand(sql,conn)

    int i=(int)cmd.ExecuteScalar()

    这样我们的局部变更i的值就是与上面我的功能一样.

    public int FindId()
            {
                var sqlSb = this.LoadConnectionString();
                using (var connection = new SqlConnection(sqlSb.ConnectionString))
                {
                    connection.Open();
                    using (var cmmd = new SqlCommand(
                        string.Format("select top 1 ID from [table] where CustomerId = '{0}' order by uploadedDate desc", this.customerId),
                        connection))
                    {
                        var cabId = (int)cmmd.ExecuteScalar();
                        return cabId;
                    }
                }
            }
    View Code
  • 相关阅读:
    ping 的零碎知识
    dhcp问题
    Apache相关知识与配置
    Android || IOS录制mp3语音文件方法
    Sheet can not be presented because the view is not in a window的解决办法,和window的简单使用
    测试题1 IOS面试基础题
    IOS 封装类的时候注释格式,使用的时候可以想官方库一样快捷显示
    IOS 用正则表达式解析HTML等文件,得到所有文本
    IOS源码封装成.bundle和.a文件时,使用单例作为出口的写法!任何封装都建议使用这种方法作为出口
    XMLParser解析xml--内容源自网络(在静态库中不能用GDATA来解析,因为静态库不能加动态库)
  • 原文地址:https://www.cnblogs.com/binyao/p/3088956.html
Copyright © 2011-2022 走看看