首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3层应用问题

3层应用问题
EN

Stack Overflow用户
提问于 2011-02-27 21:50:08
回答 2查看 244关注 0票数 0

对于学校,我们必须做一个3 3tier的申请。具有数据库、webservice和客户端部分。现在我有了以下存储过程,

代码语言:javascript
复制
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

当我执行这个任务时,效果很好。但是当我在我的webservice中尝试它时,我会得到以下错误。

System.NullReferenceException:未设置为对象实例的对象引用。在D:\School\Programmeren 2\Movie_rent\Movie_rent\App_code\Movie_rentDB.vb:line VB.net\Periode 105 at Movie_rent.Movie_web.addMovie(String film_naam,String film_hoofdrol)中的Movie_rent.Movie_rentDB.addMovie(String film_naam,String film_hoofdrol):\School\Programmeren VB.net\Periode VB.net\Periode 40

我的webservice部分

代码语言:javascript
复制
  <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课

代码语言:javascript
复制
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

希望有人能帮我:)

EN

回答 2

Stack Overflow用户

发布于 2011-03-01 16:21:38

在您的代码中,当您传递命令存储过程时,您传递了3个参数,但是addMovie只接受2个参数。

票数 1
EN

Stack Overflow用户

发布于 2011-02-27 22:02:28

据我所知,您的问题是不调用CreateConnection并创建新的连接。在您的Prepare_StoredProcedureCall子中,可以执行以下操作:` CommandMovie =新SqlCommand(strStoredProcedure,conMovie) CommandMovie.CommandType = CommandType.StoredProcedure

代码语言:javascript
复制
    adapMovie = New SqlDataAdapter(CommandMovie)
    DataSetMovie = New DataSet()

    conMovie.Open()

‘问题是此时没有创建conMovie。你需要这样做:

代码语言:javascript
复制
 CreateConnection
 CommandMovie = New SqlCommand(strStoredProcedure, conMovie)
    CommandMovie.CommandType = CommandType.StoredProcedure

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

    conMovie.Open()

编辑:我注意到您的.vb文件中没有这个特定类的.vb。这可能是问题所在吗?如果你已经搞清楚了,对不起我太晚了,帮不了你:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5136239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档