2010-11-10 3 views
0

я имел обыкновение использовать наборы данных вместо sqldatareaders и я использовал, чтобы быть в состоянии сделать что-то вроде этогоSqlDataReader значение находки каждой строки

If dataset.tables(0).Rows(0)(1).ToString()) = "N" Then 
    lbl.Text = dataset.tables(0).Rows(0)(2).ToString()) 
Else 
    'Do Nothing 
End If 

Это, очевидно, не работает с sqldatareaders.

У меня есть код, чтобы увидеть, если SqlDataReader имеет какие-либо строки, но было интересно, если есть способ, чтобы получить значение каждой строки

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

Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'") 

conn.Open() 

Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn) 

Dim oDR As SqlDataReader = query.ExecuteReader() 

If oDR.HasRows or dataset.tables(0).Rows(0)(1).ToString()) = "N" Then 
    lbl.Text = dataset.tables(0).Rows(0)(2).ToString()) 
Else 
    'Do Nothing 
End If 

То есть код у меня в тот момент, который, очевидно, не работает

есть идеи?

Благодаря

+0

Проверьте эту ссылку: [http://www.startvbdotnet.com/ado/sqlserver.aspx](http://www.startvbdotnet.com/ado/sqlserver.aspx) Или этот: [http: /snipplr.com/view/13059/loop-through-a-datareader/](http://snipplr.com/view/13059/loop-through-a-datareader/) –

ответ

0

При использовании чтения данных, вы должны пройти через каждую строку самостоятельно. Использование HasRows - хороший старт, поскольку он скажет вам, что возвращаемый набор результатов пуст.

Для повторного набора результатов вы должны использовать метод Read(). Он вернет true, если вы находитесь в строке и false, когда вы перешли за последнюю строку.

Мой Vb бедна, поэтому я дам вам пример в C# вместо:

if (oDR.HasRows && oDR.Read()) 
{ 
    if (oDR.GetString(0) == "N") 
    { 
    lbl.Text = oDr.GetString(1); 
    } 
} 

Здесь я сначала проверить, что у нас есть набор результатов с данными, а затем попытаться перейти к первому ряду. Если это удается, я затем прочитал строковое значение первого столбца и сравнил его с «N». Если значение равно «N», я устанавливаю свойство Text переменной lbl в строковое значение второго столбца.

Это должно быть эквивалентно вашему алгоритму с помощью набора данных. Я рекомендую вам прочитать MSDN documentation for the SqlDataReader. Это неплохо, и примерный код полезен.

Смежные вопросы