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而不是我的字符串?
注意:此错误与添加命名空间,引用或类似内容无关。
答案 0 :(得分:3)
除了类设计和数据库访问实践中的错误之外,第一个问题是您传递给构造函数的参数。
您尚未在cmd
中定义Page_Load
。您对构造函数的调用应如下所示:
open op = new open("diz", new SqlCommand());
(您也可以查看Naming Conventions - MSDN)
第二个问题:为什么它只是说我的SqlCommand而不是我的 字符串?
没有错误,因为您将有效的字符串常量传递给参数storedp
答案 1 :(得分:0)
除了未能传递“cmd”的合格参数值(正如Habib指出的那样);
在构造函数中,您有以下代码:
this.cmd = cmd = new SqlCommand(this.storedp = storedp, con);
将参数传递给调用是否真的重要?您可以完全删除该参数。
答案 2 :(得分:0)
在page_Load中使用参考,在cmd:
中使用类在Page_Load中:
SqlCommand cmd = new SqlCommand();
open op = new open("diz",ref cmd);
课堂上:
public open(string storedp, ref SqlCommand cmd)
{
//...