3-х уровневая проблема приложения - PullRequest
0 голосов
/ 28 февраля 2011

Для школы нам нужно подать более 3 заявки.С базой данных, веб-сервисом и клиентской частью.Теперь у меня есть следующая хранимая процедура,

ALTER PROCEDURE dbo.addMovie
(
@film_naam nvarchar(50),
@film_hoofdrol nvarchar(50)

)
AS
/* SET NOCOUNT ON */
INSERT INTO tbl_film 
     (film_naam, film_status, film_hoofdrol)
     VALUES(@film_naam,0,@film_hoofdrol)
RETURN

Когда я выполняю это, он прекрасно работает.Но когда я попробовал это в моем веб-сервисе, я получаю следующую ошибку:

System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.на Movie_rent.Movie_rentDB.addMovie (Строка film_naam, Строка film_hoofdrol) в D: \ School \ Programmeren VB.net \ Periode 2 \ Movie_rent \ Movie_rent \ App_code \ Movie_rentDB.vb: строка 105 на Movie_rent.Movie_weam_ringingfilm_hoofdrol) в D: \ School \ Programmeren VB.net \ Periode 2 \ Movie_rent \ Movie_rent \ Movie_web.asmx.vb: строка 40

Моя часть веб-сервиса

  <WebMethod()> _
Public Function addMovie(ByVal film_naam As String, ByVal film_hoofdrol As String) As Boolean
    Dim Movie_rent As New Movie_rentDB()
    Return Movie_rent.addMovie(film_naam, film_hoofdrol)
End Function

Имой класс Movie_rentDB

Public Class Movie_rentDB
Private strApplicationName As String = "Movie rent"

Private strConnection As String
Private conMovie As SqlConnection
Private adapMovie As New SqlDataAdapter
Private CommandMovie As SqlCommand
Private DataSetMovie As New DataSet

Private sqlTransaction As SqlTransaction
Private objLoggingService As Logging.Logging = New Logging.Logging("d:\\WebService.log")

Public ReadOnly Property ConnectionString() As String
    Get
        Try
            Return ConfigurationManager.ConnectionStrings("Movie_rent").ConnectionString

        Catch ex As Exception
            objLoggingService.WriteLine(strApplicationName, ex.Message)
            Throw (ex)
        End Try
        Return ""
    End Get
End Property

Public Sub CreateConnection()
    Try
        conMovie = New SqlConnection(ConnectionString)
    Catch ex As Exception
        objLoggingService.WriteLine(strApplicationName, ex.Message)
        Throw (ex)
    End Try
End Sub
Private Sub Prepare_StoredProcedureCall(ByVal strStoredProcedure As String)
    Try
        CommandMovie = New SqlCommand(strStoredProcedure, conMovie)
        CommandMovie.CommandType = CommandType.StoredProcedure

        adapMovie = New SqlDataAdapter(CommandMovie)
        DataSetMovie = New DataSet()

        conMovie.Open()

        sqlTransaction = conMovie.BeginTransaction
        CommandMovie.Transaction = sqlTransaction

    Catch ex As Exception
        objLoggingService.WriteLine(strApplicationName, ex.Message)
        Throw (ex)
    End Try
End Sub
Private Sub Finish_StoredProcedureCall()
    Try
        If (conMovie.State = ConnectionState.Open) Then
            conMovie.Close()
        End If
    Catch ex As Exception
        objLoggingService.WriteLine(strApplicationName, ex.Message)
        Throw (ex)
    End Try
End Sub
Public Function getAllMovies() As DataSet
    Try
        Prepare_StoredProcedureCall("getAllMovies")
        adapMovie.Fill(DataSetMovie, "tbl_film")
        sqlTransaction.Commit()
    Catch ex As Exception
        If Not (sqlTransaction Is Nothing) Then
            sqlTransaction.Rollback()
        End If
        DataSetMovie = Nothing
        objLoggingService.WriteLine(strApplicationName, ex.Message)
        Throw (ex)
    End Try
    Try
        Finish_StoredProcedureCall()
    Catch ex As Exception
        DataSetMovie = Nothing
        Throw (ex)
    End Try
    Return DataSetMovie
End Function
Public Function addMovie(ByVal film_naam As String, ByVal film_hoofdrol As String) As Boolean
    Dim bStatus As Boolean = False
    Try
        Prepare_StoredProcedureCall("addMovie")

        With CommandMovie.Parameters
            .AddWithValue("film_naam", film_naam)
            .AddWithValue("film_status", 0)
            .AddWithValue("film_hoofdrol", film_hoofdrol)

        End With
        CommandMovie.ExecuteNonQuery()
        sqlTransaction.Commit()
        bStatus = True
    Catch ex As Exception
        sqlTransaction.Rollback()
        objLoggingService.WriteLine(strApplicationName, ex.Message)
        Throw (ex)
    End Try
    Finish_StoredProcedureCall()
    Return bStatus
End Function

Надеюсь, кто-нибудь может мне помочь:)

Ответы [ 2 ]

1 голос
/ 01 марта 2011

В вашем коде, когда вы добавляете хранимую процедуру команды, вы передаете 3 параметра, но ваш sproc принимает только 2 параметра.

0 голосов
/ 28 февраля 2011

Из того, что я могу понять, ваша проблема в том, что вы не звоните CreateConnection и не создаете новое соединение. В вашей подпрограмме Prepare_StoredProcedureCall вы делаете это: `CommandMovie = New SqlCommand (strStoredProcedure, conMovie) CommandMovie.CommandType = CommandType.StoredProcedure

    adapMovie = New SqlDataAdapter(CommandMovie)
    DataSetMovie = New DataSet()

    conMovie.Open()

` Проблема в том, что conMovie не создается на данный момент. Вам нужно сделать что-то вроде этого:

 CreateConnection
 CommandMovie = New SqlCommand(strStoredProcedure, conMovie)
    CommandMovie.CommandType = CommandType.StoredProcedure

    adapMovie = New SqlDataAdapter(CommandMovie)
    DataSetMovie = New DataSet()

    conMovie.Open()

Edit: Я заметил, что у вас нет End Class в вашем файле .vb для этого конкретного класса. Может ли это быть проблемой? P.S: Если вы уже поняли это, извините, я слишком поздно, чтобы помочь вам:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...