public System.Data.SqlClient.SqlDataReader ExecuteQuery(string QueryString, params object[] args)
{
return (System.Data.SqlClient.SqlDataReader)GetQueryResult(System.String.Format(QueryString, args), 1);
}
Возврат SqlDataReader из функции. Проблема
Код:
Проблема в том, что когда я пытаюсь использовать эту функцию, компилятор пишет что я пытаюсь вызвать тот или иной метод, когда дата ридер закрыт.
Код:
public bool IsExistingMember(string login, string password)
{
if (tdb.ExecuteQuery("SELECT * FROM accounts WHERE login = '{0}' AND password = '{1}'", login, password).HasRows)
return true;
else
return false;
}
{
if (tdb.ExecuteQuery("SELECT * FROM accounts WHERE login = '{0}' AND password = '{1}'", login, password).HasRows)
return true;
else
return false;
}
Вопросы соответственно:
1. Нужно смириться с фактом что возвращать объекты типа SqlDataReader нельзя и далать иначе?
2. Можно ли сделать чтобы дата ридер был открыт после возвращения?
3. Можно ли открыть возвращенный дата ридер самому?
Всем спасибо
P. S. Тоже может пригодиться:
Код:
private System.Object GetQueryResult(string QueryString, int ConnectionType)
{
/*int i = 0;
System.Object ret = null;
for (;;)
{
i = counter % CONNECTION_COUNT;
if (!ConnectionLocked)
{
ConnectionLocked = true;
TargetConnections.Open();
System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(QueryString, TargetConnections);
if (ConnectionType == 1) //select
ret = com.ExecuteReader();
else if (ConnectionType > 1) //update, delete
ret = com.ExecuteNonQuery();
TargetConnections.Close();
ConnectionLocked = false;
return ret;
}
counter++;
}*/
System.Object ret = null;
System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(QueryString, TargetConnection);
TargetConnection.Open();
if (ConnectionType == 1) //select
ret = com.ExecuteReader();
else if (ConnectionType > 1) //update, delete
ret = com.ExecuteNonQuery();
TargetConnection.Close();
return ret;
}
{
/*int i = 0;
System.Object ret = null;
for (;;)
{
i = counter % CONNECTION_COUNT;
if (!ConnectionLocked)
{
ConnectionLocked = true;
TargetConnections.Open();
System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(QueryString, TargetConnections);
if (ConnectionType == 1) //select
ret = com.ExecuteReader();
else if (ConnectionType > 1) //update, delete
ret = com.ExecuteNonQuery();
TargetConnections.Close();
ConnectionLocked = false;
return ret;
}
counter++;
}*/
System.Object ret = null;
System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(QueryString, TargetConnection);
TargetConnection.Open();
if (ConnectionType == 1) //select
ret = com.ExecuteReader();
else if (ConnectionType > 1) //update, delete
ret = com.ExecuteNonQuery();
TargetConnection.Close();
return ret;
}
P. S. 2
Разобрался в чем дело. Если соединение с БД закрывается, то дата ридер использовать нельзя *CRAZY*. Удалил бы эту тему, если бы тут можно было свои темы удалять