2013-09-16 6 views
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 с одним классом, который я могу сказать, что он должен использовать хранимый proc. и который sqlcommand, как вы видите.создание класса, использующего 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, но не для моей строки?

Примечание: эта ошибка не связана с добавлением пространства имен, ссылки или чего-то в этом роде.

+3

Вы должны прочитать эту ссылку [C# Учебники] (HTTP: //msdn.microsoft.com/en-us/library/aa288436(v=vs.71).aspx) –

ответ

0

Использование исх в Page_Load и класса CMD:

В Page_Load:

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

В классе:

public open(string storedp, ref SqlCommand cmd) 
{ 
    //... 
3

Помимо ошибок в вашем классе и практике доступа к базе данных, первой проблемой является параметр, который вы передаете своему конструктору.

Вы не указали cmd в своем Page_Load. Ваш вызов конструктора должен выглядеть следующим образом:

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

(Вы также можете посмотреть на Naming Conventions - MSDN)

Второй вопрос: почему его просто говорит, что для моего SqlCommand, но не для моей строки?

Там нет ошибки, потому что вы передаете действительную строковую константу к вашему параметру storedp

Вы можете увидеть эту старую статью о Best Practices for Using ADO.NET - MSDN

0

Помимо неспособности пройти квалифицированное значение параметра для «ЦМД »(как указал Хабиб);

В конструкторе у вас есть этот код:

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

ли это на самом деле имеет значения, если вы передаете параметр в вызове? Вы можете полностью удалить параметр.

Смежные вопросы