Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
Я работаю c sql server 2000. Мне надо получить определенное количество записей. Это количество лежит в переменной n. Как правильно составить запрос пишу: select TOP n ID1 FROM Work, ну и т.д. Ошибка. Помогите!
13 окт 06, 01:17    [3256464]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537

Вариантов ... несколько > 2х, но самые быстрые: 1. Как Вы уже сказали - TOP,
но для этого придётся формировать динамический запрос и запущать полученную
строчку; 2. использовать set rowcount N. Подробност см. BOL. И вопросы по
скулю лучше задавать на соотв. форуме :)


Posted via ActualForum NNTP Server 1.3

13 окт 06, 08:55    [3256733]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Bigheadman
Member

Откуда:
Сообщений: 2663
Добавлю, что SQL Server 2005 поддерживает конструкцию TOP @n, где @n - переменная.
13 окт 06, 10:46    [3257448]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";
n=15;

sqlcommand mycom = new sqlcommand(sqlstring, mycon);

----
www.hramin.jino-net.ru
Картинка с другого сайта.
13 окт 06, 11:15    [3257635]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
zz118
Member

Откуда:
Сообщений: 477
убить камнем за такой динамик sql
13 окт 06, 12:26    [3258288]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
Ramin
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";
n=15;

sqlcommand mycom = new sqlcommand(sqlstring, mycon);

----
www.hramin.jino-net.ru
Картинка с другого сайта.

Это не прошло.
13 окт 06, 13:52    [3259148]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
скажы честно, какая разница будет???, самый лучшый вариант сказал Bigheadman , но это не для 2000!

стринг в конце концов получится
"select TOP 15 ID1 FROM Work";

----
www.hramin.jino-net.ru
Картинка с другого сайта.
13 окт 06, 13:53    [3259151]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
автор
скажы честно, какая разница будет???,


тоесть исправлю себя,

---"какие не достатки будет"???
отвечу --- никакие!

доказывай что будет!!

----
www.hramin.jino-net.ru
Картинка с другого сайта.
13 окт 06, 13:54    [3259162]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
puma1
Ramin
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";
n=15;

sqlcommand mycom = new sqlcommand(sqlstring, mycon);

----
www.hramin.jino-net.ru
Картинка с другого сайта.

Это не прошло.



а так:

string n;
n = "15";
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";
sqlcommand mycom = new sqlcommand(sqlstring, mycon);



----
www.hramin.jino-net.ru
Картинка с другого сайта.
13 окт 06, 13:58    [3259190]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
Ramin
puma1
Ramin
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";
n=15;

sqlcommand mycom = new sqlcommand(sqlstring, mycon);

----
www.hramin.jino-net.ru
Картинка с другого сайта.

Это не прошло.



а так:

string n;
n = "15";
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";
sqlcommand mycom = new sqlcommand(sqlstring, mycon);



----
www.hramin.jino-net.ru
Картинка с другого сайта.

То же самое. :(
13 окт 06, 14:22    [3259355]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Bigheadman
Member

Откуда:
Сообщений: 2663
2 puma1.
Если не приведете текст ошибки, то гадание на кофейной гуще будет долго продолжаться.
13 окт 06, 14:26    [3259379]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
слушай пумучка, я сперва добавлял на стринг интегер что б ты тоже сама что то сама сообразила а не копировалкод, если не работает стринг на стринг, и просто извини меня тупо сказать не прошло тогда вы что то не договариваети!

автор
То же самое. :(

какую ошибку дает?

----
www.hramin.jino-net.ru
Картинка с другого сайта.
13 окт 06, 14:27    [3259384]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
Ramin
слушай пумучка, я сперва добавлял на стринг интегер что б ты тоже сама что то сама сообразила а не копировалкод, если не работает стринг на стринг, и просто извини меня тупо сказать не прошло тогда вы что то не договариваети!

автор
То же самое. :(

какую ошибку дает?

----
www.hramin.jino-net.ru
Картинка с другого сайта.

Во-первых, ты может уже давно в этом программируешь, я вообще только начала учить ADO.NET , если, что-то не получается обращаюсь сюда, потому-что не куда больше, учусь сама. Если спросила, какую-то ерунду, то не надо отвечать грубостью, лучше промолчи или объясни. Вообще я читала, что нельзя в SQL Server 2000, в случае с TOP вкладывать переменные, можно только так например Select TOP 5, а так нельзя Select TOP n. Из-за этого и обратилась за помощью, а не чтоб копировать твой код. А текст ошибки
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. И показывает на строку reader.Close(); А когда пишу, Select TOP 5, то все работает.
13 окт 06, 15:02    [3259651]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
zz118
Member

Откуда:
Сообщений: 477
приведи полный код
13 окт 06, 15:10    [3259704]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
zz118
приведи полный код

private void Page_Load(object sender, System.EventArgs e)
{
string str1="";

int k=0;
XmlTextReader reader = new XmlTextReader (Server.MapPath("djon.xml"));
while (reader.Read())
{
if(reader.Name=="AMOUNT")
{
str1=reader.ReadElementString();
k=Convert.ToInt32(str1);

}

}

SqlConnection myConnection = new SqlConnection("server=(local);database=Northwind;Trusted_Connection=yes");
SqlDataReader reader1= null;

try
{



myConnection.Open();

string sqlstring = "select TOP k ID1 FROM Work ORDER BY ID1";
SqlCommand myCommand = new SqlCommand(sqlstring, myConnection);
reader1 = myCommand.ExecuteReader();
while (reader1.Read())
{

Response.Write("ID1="+reader1.GetDecimal(0));
Response.Write(" ");


}
}

catch (SqlException ex)
{
Response.Write(ex.Message);
}

finally
{
reader1.Close();
myConnection.Close();
}

}
13 окт 06, 15:24    [3259789]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
zz118
Member

Откуда:
Сообщений: 477
"select top " + Convert.ToString(k) + " * ..."
хотя бы так, но ОЧЕНЬ не безопасно!
13 окт 06, 15:47    [3259933]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Bigheadman
Member

Откуда:
Сообщений: 2663
автор
А текст ошибки
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. И показывает на строку reader.Close(); А когда пишу, Select TOP 5, то все работает

Постойте. Указанная ошибка никоим образом не связана с SELECT TOP.
13 окт 06, 15:56    [3259992]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Думающий
Guest
puma1

если, что-то не получается обращаюсь сюда, потому-что не куда больше, учусь сама.

Все как правило учаться сами, а не ходят на курсы.
puma1

Если спросила, какую-то ерунду, то не надо отвечать грубостью, лучше промолчи или объясни.

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

puma1

Вообще я читала, что нельзя в SQL Server 2000, в случае с TOP вкладывать переменные, можно только так например Select TOP 5, а так нельзя Select TOP n. Из-за этого и обратилась за помощью, а не чтоб копировать твой код.

Конкретно в TOP нельзя, но вы формируете строку на стороне клиента, а значит можете в строковую переменную запихнуть строку с количеством , как это сделать вам уже объяснили.


Если у вас выдает ошибку на Reader.Close, не пробовали убрать TOP из запроса и вставить туда просто SELECT * from ...., может дело то не в TOP\


Из приведенного кода

string sqlstring = "select TOP k ID1 FROM Work ORDER BY ID1";
поему вы гне адо начала изучать не давно, а вообще программирование.
Переменные так не вставляются в строку, сервер о вашей K ничего не знает, сделайте
string sqlstring = "select TOP " + k.toString + " ID1 FROM Work ORDER BY ID1";

По поводу k.toString пусть СИсты меня поправят, я в нем не знаток.
13 окт 06, 15:58    [3260010]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
zz118
Member

Откуда:
Сообщений: 477
+ ко всему вне блока try{...} этот reader вообще не существует (=null).
13 окт 06, 16:03    [3260048]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Думающий
Guest
zz118
+ ко всему вне блока try{...} этот reader вообще не существует (=null).

Это вы к тому что в finally можем попасть до присвоения ридера...да, похоже на это...
13 окт 06, 16:08    [3260087]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
Думающий
puma1

если, что-то не получается обращаюсь сюда, потому-что не куда больше, учусь сама.

Все как правило учаться сами, а не ходят на курсы.
puma1

Если спросила, какую-то ерунду, то не надо отвечать грубостью, лучше промолчи или объясни.

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

puma1

Вообще я читала, что нельзя в SQL Server 2000, в случае с TOP вкладывать переменные, можно только так например Select TOP 5, а так нельзя Select TOP n. Из-за этого и обратилась за помощью, а не чтоб копировать твой код.

Конкретно в TOP нельзя, но вы формируете строку на стороне клиента, а значит можете в строковую переменную запихнуть строку с количеством , как это сделать вам уже объяснили.


Если у вас выдает ошибку на Reader.Close, не пробовали убрать TOP из запроса и вставить туда просто SELECT * from ...., может дело то не в TOP\


Из приведенного кода

string sqlstring = "select TOP k ID1 FROM Work ORDER BY ID1";
поему вы гне адо начала изучать не давно, а вообще программирование.
Переменные так не вставляются в строку, сервер о вашей K ничего не знает, сделайте
string sqlstring = "select TOP " + k.toString + " ID1 FROM Work ORDER BY ID1";

По поводу k.toString пусть СИсты меня поправят, я в нем не знаток.

select TOP k ID1 FROM. Я знаю, что так не пишут, просто в этом мой вопрос и состоял, как правильно это написать, до этого писала "select TOP " + k + " ID1 FROM. Выдавал ошибку. А насчет этого ( Конкретно в TOP нельзя, но вы формируете строку на стороне клиента, а значит можете в строковую переменную запихнуть строку с количеством , как это сделать вам уже объяснили.) я поняла. Спасибо за участие
13 окт 06, 16:09    [3260094]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Думающий
Guest
puma1
Я знаю, что так не пишут, просто в этом мой вопрос и состоял, как правильно это написать, до этого писала "select TOP " + k + " ID1 FROM.

Ну так вы ставьте вопрос точнее..и приводе пример того что у вас не работает и текст ошибки, вам будут помогать гараздо быстрее =)
13 окт 06, 16:12    [3260112]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
Думающий
puma1
Я знаю, что так не пишут, просто в этом мой вопрос и состоял, как правильно это написать, до этого писала "select TOP " + k + " ID1 FROM.

Ну так вы ставьте вопрос точнее..и приводе пример того что у вас не работает и текст ошибки, вам будут помогать гараздо быстрее =)

Хорошо. Спасибо большое за помощь.
13 окт 06, 16:22    [3260195]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
дорогой Пума если обидел вас извините не хотел

но как не нервничать?!
я дал вам такой код
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";

а вы даже не правльно скопировали :)
автор
string sqlstring = "select TOP k ID1 FROM Work ORDER BY ID1";






----
www.hramin.jino-net.ru
Картинка с другого сайта.
13 окт 06, 16:47    [3260358]     Ответить | Цитировать Сообщить модератору
 Re: select TOP  [new]
puma1
Member

Откуда:
Сообщений: 160
Ramin
дорогой Пума если обидел вас извините не хотел

но как не нервничать?!
я дал вам такой код
string sqlstring = "select TOP  "+n+"  ID1 FROM Work";

а вы даже не правльно скопировали :)
автор
string sqlstring = "select TOP k ID1 FROM Work ORDER BY ID1";






----
www.hramin.jino-net.ru
Картинка с другого сайта.

Дело в том, что я все перепробывала и так "select TOP "+n+" ID1 FROM Work" и так "select TOP "+n.ToString()+" ID1 FROM Work". Я думала в этом проблема, оказалось, что ошибка была в другом. Сейчас все прекрасно работает. Спасибо за помощь.
13 окт 06, 17:01    [3260449]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить