Count Sql C#
От: Welt  
Дата: 26.08.08 09:06
Оценка:
Привет! Есть вот такая проблема,нужно просто посчитать количество записей и записать их в переменную. в последней строчке выдает ошибку "Недопустимая попытка чтения при отсутствии данных." хотя проверяю отдельно запрос он работает
string SqlID = string.Format(@"SELECT COUNT(Type_Auto_ID) AS Expr1 FROM Type_Auto");
SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=""C:\Documents and Settings\Admin\Рабочий стол\Auto Base\Auto_Base.mdf"";Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand cnd = new SqlCommand(SqlID, cn);
cn.Open();
SqlDataReader mydatareader;
mydatareader = cnd.ExecuteReader(CommandBehavior.CloseConnection);
string sss = mydatareader["Expr1"].ToString().Trim();
Re: Count Sql C#
От: linker Россия  
Дата: 26.08.08 10:24
Оценка: +1
Здравствуйте, Welt, Вы писали:

W>Привет! Есть вот такая проблема,нужно просто посчитать количество записей и записать их в переменную. в последней строчке выдает ошибку "Недопустимая попытка чтения при отсутствии данных." хотя проверяю отдельно запрос он работает

W>string SqlID = string.Format(@"SELECT COUNT(Type_Auto_ID) AS Expr1 FROM Type_Auto");
W> SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=""C:\Documents and Settings\Admin\Рабочий стол\Auto Base\Auto_Base.mdf"";Integrated Security=True;Connect Timeout=30;User Instance=True");
W> SqlCommand cnd = new SqlCommand(SqlID, cn);
W> cn.Open();
W> SqlDataReader mydatareader;
W> mydatareader = cnd.ExecuteReader(CommandBehavior.CloseConnection);
W> string sss = mydatareader["Expr1"].ToString().Trim();


Ну во-первых хорошо бы теги форматирования использовать.
А во вторых
 int cnt=cnd.ExecuteScalar();
... << RSDN@Home 1.2.0 alpha rev. 789>>
Re: Count Sql C#
От: Andrew Andriychuk Украина  
Дата: 27.08.08 06:05
Оценка: -1
Здравствуйте, Welt, Вы писали:

W>Привет! Есть вот такая проблема,нужно просто посчитать количество записей и записать их в переменную. в последней строчке выдает ошибку "Недопустимая попытка чтения при отсутствии данных." хотя проверяю отдельно запрос он работает

W>string SqlID = string.Format(@"SELECT COUNT(Type_Auto_ID) AS Expr1 FROM Type_Auto");
W> SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=""C:\Documents and Settings\Admin\Рабочий стол\Auto Base\Auto_Base.mdf"";Integrated Security=True;Connect Timeout=30;User Instance=True");
W> SqlCommand cnd = new SqlCommand(SqlID, cn);
W> cn.Open();
W> SqlDataReader mydatareader;
W> mydatareader = cnd.ExecuteReader(CommandBehavior.CloseConnection);
W> string sss = mydatareader["Expr1"].ToString().Trim();

Советую использовать для таких целей хранимые продцедуры с возвращаемыми параметрами. Повысиш быстродействие и будет легче отлаживать код.
Создай хранимую продцедуру с параметром Expr1, а потом в режиме отладки проверь значение параметра. Вероятней всего сейчас mydatareader["Expr1"] возвращает null. Еще строка CommandBehavior.CloseConnection возможно проблема в ней т.е запрос выполняется и соединение закрывается, а SqlDataReader обращается к пустому набору данных. Вобщем мой совет — используй хранимые продцедуры.
Re: Count Sql C#
От: Ziaw Россия  
Дата: 27.08.08 06:36
Оценка:
Здравствуйте, Welt, Вы писали:

W>Привет! Есть вот такая проблема,нужно просто посчитать количество записей и записать их в переменную. в последней строчке выдает ошибку "Недопустимая попытка чтения при отсутствии данных." хотя проверяю отдельно запрос он работает

W>string SqlID = string.Format(@"SELECT COUNT(Type_Auto_ID) AS Expr1 FROM Type_Auto");
W> SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=""C:\Documents and Settings\Admin\Рабочий стол\Auto Base\Auto_Base.mdf"";Integrated Security=True;Connect Timeout=30;User Instance=True");
W> SqlCommand cnd = new SqlCommand(SqlID, cn);
W> cn.Open();
W> SqlDataReader mydatareader;
W> mydatareader = cnd.ExecuteReader(CommandBehavior.CloseConnection);
W> string sss = mydatareader["Expr1"].ToString().Trim();

Для получения значения из IDataReader необходимо выполнить метод Read.

W>        mydatareader = cnd.ExecuteReader(CommandBehavior.CloseConnection);
          mydatareader.Read();
W>        string sss = mydatareader["Expr1"].ToString().Trim();


А для получения одного значения существует ExecuteScalar, как было указано выше.
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.