2014-01-07 4 views
1

Я получил этот блок кода в код-за:переменная DateTime выходит из области видимости

while (DT1.Read()) 
{ 
    //Read the record into an "array", so you can find the SProc and View names 
    int MyRptID = Convert.ToInt32(DT1[0]); 
    string MyRptName = DT1[1].ToString(); 
    string MyRptSproc = DT1[2].ToString(); 
    string MySQLView = DT1[3].ToString(); 

    if (string.IsNullOrWhiteSpace(this.txtStartDate.Text)) 
    { 
    DateTime MyStDate = Convert.ToDateTime(this.txtStartDate.Text); 
    } 

    if (MyStDate != null) 
    { 
    cmd2.Parameters.Add("@StDate", SqlDbType.Date).Value = txtStartDate.Text; 
    } 

MyStDate подчеркнут красным цветом, а когда я зависать над ним я получаю всплывающее окно, которое говорит, " Имя «MyStDate» не существует в текущем контексте ». Может ли кто-нибудь сказать мне, почему это? Имеет ли это отношение к тому, что он находится за пределами скобки? Если да, то как я могу заставить его работать?

ответ

2

Перед утверждением if вам необходимо объявить MyStDate. Вот почему он выходит за рамки.

while (DT1.Read()) 
{ 
    //Read the record into an "array", so you can find the SProc and View names 
    int MyRptID = Convert.ToInt32(DT1[0]); 
    string MyRptName = DT1[1].ToString(); 
    string MyRptSproc = DT1[2].ToString(); 
    string MySQLView = DT1[3].ToString(); 
    DateTime MyStDate; 
    if (string.IsNullOrWhiteSpace(this.txtStartDate.Text)) 
    { 
     MyStDate = Convert.ToDateTime(this.txtStartDate.Text); 
    } 

    if (MyStDate != null) 
    { 
     cmd2.Parameters.Add("@StDate", SqlDbType.Date).Value = txtStartDate.Text; 
    } 
} 
3

Объем MyStDate - это условие if. Переменная не видна за пределами ее объема, поэтому вам нужно объявить MyStDate за пределами if.

1

Вы определяете DateTime MyStDate внутри блока if, поэтому он недоступен в следующем блоке if (он выходит за рамки).

Вы должны определить переменную вне первый блок if, поэтому он доступен позже в методе.

DateTime myStDate; 

if (String.IsNullOrWhiteSpace(this.txtStartDate.Text)) 
    myStDate = Convert.ToDateTime(this.txtStartDate.Text); 

if (myStDate != null) 
    cmd2.Parameters.Add("@StDate", SqlDbType.Date).Value = myStDate; 

На самом деле, похоже, что у вас есть несколько проблем с кодом.

Попробуйте это вместо того, что вы в настоящее время есть:

if (!String.IsNullOrWhiteSpace(txtStartDate.Text)) 
{ 
    DateTime myStDate; 
    if (DateTime.TryParse("txtStartDate.Text", out myStDate)) 
     cmd2.Parameters.Add("@StDate", SqlDbType.Date).Value = myStDate; 
} 
0

DO вместо этого:

DateTime MyStDate; 
if (string.IsNullOrWhiteSpace(this.txtStartDate.Text)) 
{ 
    MyStDate = Convert.ToDateTime(this.txtStartDate.Text); 
} 
0

Вам нужно создать экземпляр MyStDate вне если заявление. MyStDate не виден ничем, кроме объявленной области.

DateTime MyStDate = null; 

if (string.IsNullOrWhiteSpace(this.txtStartDate.Text)) 
    MyStDate = Convert.ToDateTime(this.txtStartDate.Text); 

if(MyStDate != null) 
    cmd2.Parameters.Add("@StDate", SqlDbType.Date).Value = MyStDate; 
Смежные вопросы