【问题标题】:What this line does?这条线是做什么的?
【发布时间】:2015-08-28 12:16:17
【问题描述】:

这是来自使用数据库的注册应用程序的一段代码。因为我可以说我知道 OOP 的基本原理,所以我理解这段代码除了第一行。 一个对象(阅读器)如何成为另一个类(SqlCommand)中另一个对象(cmd1)的方法(ExecuteReader())? 我希望我可以创建一个对象的唯一方法是这样写:(类对象=新类())。 也欢迎提供解释这一点的链接。

using(SqlDataReader reader = cmd1.ExecuteReader())
{
    if (reader.Read())
    {
        reader.Close();
        if (textBox4.Text == textBox5.Text)
        {
            using (SqlCommand cmd = new SqlCommand("UPDATE info SET Password=@Password WHERE Id=@Id AND Password=@Password1", conn))
            {
                cmd.Parameters.AddWithValue("@Password", textBox4.Text);
                cmd.Parameters.AddWithValue("@Id", textBox3.Text);
                cmd.Parameters.AddWithValue("@Password1", textBox2.Text);
                cmd.ExecuteNonQuery();
            }
            MessageBox.Show("Password has been changed");
        }
        else
            MessageBox.Show("The new password doesn't match the one written in repeat the new password blank space ");
    }
    else
        MessageBox.Show("Wrong Id or Password");
}

【问题讨论】:

  • 您知道方法如何返回值,例如 int 或 string?它们也可以返回对象的实例。 ExecuteReader 返回 SqlReader 对象的实例。 using 块使用该对象,然后一旦该块完成它就会摆脱该对象。
  • 方法可以返回对象。如果每个返回类型都必须是void,那么编写一个面向对象的系统将非常困难。

标签: c# sql sqldatareader


【解决方案1】:

这里的方法调用cmd1.ExecuteReader()返回一个SqlDataReader类型的对象实例。

然后对该对象的引用被分配给相同类型的变量reader SqlDataReader

【讨论】:

    【解决方案2】:

    reader不是方法,是函数ExecuteReader返回的对象。

    ExecuteReader 将使用通常的语法new SqlDataReader(...) 创建一个对象,然后返回它。就是这样!

    【讨论】:

      【解决方案3】:

      想象一下该方法的一个大大简化的版本,执行如下操作:

      public SqlDataReader ExecuteReader() 
      {
          return new SqlDataReader();
      }
      

      显然实现比这更复杂,但您可以很容易地看到方法调用如何返回一个对象。

      【讨论】:

        猜你喜欢
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        • 2015-06-17
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 2020-04-16
        • 1970-01-01
        相关资源
        最近更新 更多