• 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
  • 相关阅读:
    了解自己,才能踏出成功的第一步
    21世纪非常成功心法[强烈推荐]
    先做人后做事的庸才文化
    职业生涯发展技巧20则
    21世纪非常成功心法[强烈推荐6]
    豁达者的诱惑
    20个问题:平凡的天才人格特质
    21世纪非常成功心法[强烈推荐5]
    测测你的人生会走怎样路线
    21世纪非常成功心法[强烈推荐7]
  • 原文地址:https://www.cnblogs.com/binyao/p/3088956.html
Copyright © 2020-2023  润新知