Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Получить ID по полю


Автор: Pit_Bul 6.10.2006, 01:58
есть таблица следующего вида

Tab1

  type_id              type
       
       1                  type1
       2                  type2
       3                  type3
       4                  type4


Делаю из своей функции следующий запрос

Код

SELECT type_id FROM Tab1 WHERE type = 'type2'


на этот запрос он должен вернуть мне 2 в виде integer

Вот как выглядит функция

Код

    Function GetTypeID(ByVal typeName As String) As Integer
        Dim sConn As SqlConnection = New SqlConnection(connStr)
        sConn.Open()
        Dim myComm As SqlCommand = New SqlCommand
        Dim ds As DataSet = New DataSet
        Dim dr As SqlDataReader
        Dim da As SqlDataAdapter = New SqlDataAdapter
        Dim doComm As String

        doComm = "SELECT type_id FROM MemberType WHERE type = '" & typeName & "'"
        da.SelectCommand = New SqlCommand(doComm, sConn)
        da.Fill(ds)
        myComm.Connection = (sConn)
        myComm.CommandText = doComm
        dr = myComm.ExecuteReader
        Return dr("type_id")
    End Function


на строчке возврата из функции он мне выкидывает ошибку "Invalid attempt to read when no data is present." smile 

Автор: -ser- 6.10.2006, 05:17
во первых, закрывай connection. это критическая ошибка.
во вторых, не смешивай  da.Fill(ds) и dr = myComm.ExecuteReader в одну кучу. используй что-то одно, например da.Fill(ds)
Код

try
{
   da.Fill(ds).
}
catch( Exception e )
{ 
   //DataSet не залит 
}


если все нормально, то твой id сидит в датасете ds. вытягивается наподобие следующего
Код

int type_id = ( int )ds.Tables[ 0 ].Rows[ 0 ][ 0 ];

не знаю синтаксис бейсика. самая элементарная операция, в примерах должно быть.


Автор: Pit_Bul 6.10.2006, 17:10
утро вечера мудренее, сам удивляюсь как должна была работать вышеописанная функция. Наверное сказалось два фактора: 2 часа ночи и две предыдущие бессонные ночи smile . Вот исправленная и рабочая функция если кому еще понадобится.

Код

   Function GetTypeID(ByVal typeName As String) As ArrayList

        Dim sConn As SqlConnection
        Dim myComm As SqlCommand
        Dim myArr As ArrayList
        Dim dr As SqlDataReader

        sConn = New SqlConnection(connStr)
        sConn.Open()
        myComm = sConn.CreateCommand
        myComm.CommandText = "SELECT type_id FROM MemberType WHERE type = '" & typeName & "'"
        dr = myComm.ExecuteReader
        myArr = New ArrayList
        Do Until dr.Read = False
            myArr.Add(dr("type_id"))
        Loop
        dr.Close()
        sConn.Close()
        Return myArr
    End Function

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)