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
  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/binyao/p/3088956.html
Copyright © 2011-2022 走看看