0
namespace ClassLibrary1
{
    public class open    
    {        
        SqlCommand cmd;

        public SqlCommand Cmd
        {
            get { return cmd; }
            set { cmd = value; }
        }
        string storedp;

        public string Storedp
        {
            get { return storedp; }
            set { storedp = value; }
        }

        public open(string storedp, SqlCommand cmd)
        {
            SqlConnection con = new SqlConnection("Data Source=.; Initial Catalog=cau; Integrated Security=true");
            con.Open();
            this.cmd = cmd = new SqlCommand(this.storedp = storedp, con);
            this.Cmd.CommandType = CommandType.StoredProcedure;

        }
    }
}

那是我为我的网页编写的代码。我写它是因为我想打开sqlconnection一个类,我可以告诉它必须使用哪个存储过程。如sqlcommand您所见。

问题是

protected void Page_Load(object sender, EventArgs e)
{
    open op = new open("diz", cmd);
    SqlDataReader rd = cmd.ExecuteReader();
    while (rd.Read())
    {
        drop1.Items.Add(rd.GetString(0));
    }
}

这是我的 ASP.net 页面。当我尝试运行我的课程时,它说“cmd 没有属性”并且"cmd does not exist in current context". 但是我在我的“开放”类中创建它对吗?

第二个问题:为什么它只针对我的 SqlCommand 而不是针对我的字符串?

注意:此错误与添加命名空间、引用或类似内容无关。

4

3 回答 3

3

除了类设计和数据库访问实践中的错误之外,第一个问题是您传递给构造函数的参数。

你没有cmd在你的Page_Load. 您对构造函数的调用应如下所示:

open op = new open("diz", new SqlCommand());

(您还可以查看命名约定 - MSDN

第二个问题:为什么它只针对我的 SqlCommand 而不是针对我的字符串?

没有错误,因为您将有效的字符串常量传递给您的参数storedp

您可能会看到这篇关于使用 ADO.NET 的最佳实践的旧文章- MSDN

于 2013-09-16T13:18:02.247 回答
0

除了未能为“cmd”传递合格的参数值(正如 Habib 指出的那样);

在您的构造函数中,您有以下代码:

this.cmd = cmd = new SqlCommand(this.storedp = storedp, con);

是否将参数传递给调用真的很重要吗?您可以完全删除该参数。

于 2013-09-16T13:22:10.407 回答
0

在 page_Load 和类中使用ref到 cmd:

在 Page_Load 中:

SqlCommand cmd = new SqlCommand();
open op = new open("diz",ref cmd);

在班上 :

public open(string storedp, ref SqlCommand cmd)
{ 
   //...
于 2013-09-16T13:53:44.007 回答