Priya-Kiko Ответов: 3

Не могу назначить ... Поскольку это переменная using пожалуйста посоветуйте


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

mconn.Open();
using (SqlCommand msqlcmd = new SqlCommand("select * from table1", dlsmain.dlsconn))
{
    using (SqlDataReader msqldat = msqlcmd.ExecuteReader())
    {
        msqldat.Read();
		//...  
		//... assignments from msqldat
		//...
        msqldat.Close();
        msqlcmd.CommandText = "select * from table2";
        msqldat = msqlcmd.ExecuteReader();		// Error : Cannot assign to msqldat because it is a 'using variable'.
        while (msqldat.Read())
        {
			//...
			//...  Some process using msqldat
			//...
        }
        msqldat.Close();
        msqlcmd.CommandText = "select * from table3";
        msqldat = msqlcmd.ExecuteReader();
        while (msqldat.Read())
        {
			//...
			//... Some process using msqldat
			//...
        }
    }
}
mconn.Close();


Что я уже пробовал:

погуглил на ошибку, но не получил нужного канала.

3 Ответов

Рейтинг:
25

Suvendu Shekhar Giri

Попробуйте следовать-

using (SqlDataReader msqldat = msqlcmd.ExecuteReader())
{
        msqldat.Read();
	//...  
	//... assignments from msqldat
	//...
        //msqldat.Close();
} 
msqlcmd.CommandText = "select * from table2"; 
using (SqlDataReader msqldat = msqlcmd.ExecuteReader())
{
        msqldat = msqlcmd.ExecuteReader();		// Error : Cannot assign to msqldat because it is a 'using variable'.
        while (msqldat.Read())
        {
			//...
			//...  Some process using msqldat
			//...
        }
        //msqldat.Close();
}
msqlcmd.CommandText = "select * from table3";
using (SqlDataReader msqldat = msqlcmd.ExecuteReader())
{        
        msqldat = msqlcmd.ExecuteReader();
        while (msqldat.Read())
        {
			//...
			//... Some process using msqldat
			//...
        }
}


Надеюсь, это поможет :)


Priya-Kiko

Огромное спасибо.

msqldat.Однако Close () необходим :)

Suvendu Shekhar Giri

Да.. Вот почему я их прокомментировал.
Галд что это помогло :)

Priya-Kiko

Огромное спасибо. 5 звезд вам.

Karthik_Mahalingam

5

Suvendu Shekhar Giri

Спасибо :)

Karthik_Mahalingam

добро пожаловать :)

Рейтинг:
1

Richard MacCutchan

Послание достаточно ясно. Вы объявили (и назначили ссылку на) msqldat В вашем using оператор, что означает, что он эффективно доступен только для чтения внутри блока. Если вы выделите ему какое-то другое значение, то он будет скомпрометирован и не сможет правильно распорядиться исходной ссылкой.


Priya-Kiko

Спасибо, так это то, что мне нужно закрыть с помощью блока после msqldat.Закрыть, а затем снова открыть другой блок using для следующего набора операторов ?

Richard MacCutchan

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

Priya-Kiko

Спасибо.

Рейтинг:
1

The Praveen Singh

You can't change reference once you used in using clause. I don't thing you require using there, its dis-connected.