数据访问层-SQL 2005-代码错误 [英] Data Access Layer - Sql 2005 - Error in code
问题描述
我是Visual Studio的新宠,正在为我的公司编写ERP.
参考一本书,我正在准备数据访问层(四层体系结构)的代码,但是它给出了以下错误.
如果时间允许,请帮助我更正代码.谢谢.
01.一个命名空间DataService.
02.两个类DataServer&通用参数.
03.两个附加函数:ConvertToSqlParameters& makeclear.
错误:
01.未声明privateParameterList(makeclear函数和常规参数的子BuildParameter"中的错误)
02.未声明privateExceptionMessage(makeclear函数出错)
03.未声明SQLDataType(常规参数的子BuildParameter中的错误)
04.未声明ConvertToSqlParameters(在DataServer的runTransaction函数中)
I''m a new bee to Visual Studio and writing an ERP for my Co.
Refering to a book, I''m preparing the code of DATA ACCESS LAYER (four layer architecture), but it gives error as given below.
Please help me to correct the code if time permits you to do so. Thanks.
01. One Namespace DataService.
02. Two classes DataServer & GeneralParameters.
03. Two additional functions: ConvertToSqlParameters & makeclear.
Errors:
01. privateParameterList is not declared (Error in makeclear function & Sub BuildParameter of General Parameter)
02. privateExceptionMessage is not declared (Error in makeclear function)
03. SQLDataType is not declared (Error in Sub BuildParameter of General Parameter)
04. ConvertToSqlParameters is not declared (in function runTransaction of DataServer)
'myVbDataAccessLayer
'Import ADO.net namespaces
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Xml
Imports System.Collections
Imports System.Diagnostics
'Declare the namespace DataService and the Class DataServer
Namespace DataService
Public Class DataServer
Private myConnectionString As String
Private myConnection As SqlConnection
Private myCommand As SqlCommand
Private myDataReader As SqlDataReader
Private myXmlReader As XmlReader
Private mySqlDataAdapter As SqlDataAdapter
Private myDataSet As DataSet
'The variable PrivateParameterList holds parameters which are passed from the Business Layer
Private privateParameterList As ArrayList = New ArrayList()
Private Const privateExceptionMessage As String = "Data Application Error"
'SqlDataType (Enum)
'constructor of DataServer class
Public Sub New(ByVal ConnectionString As String)
myConnectionString = ConnectionString
End Sub
'class methods in the DataServer class
Public Function returnDataSet(ByVal SPName As String, Optional ByVal TableName As String = Nothing) As DataSet
'Accepts a stored procedure and a table name and returns a dataset.
Dim privateUsedParameter As GeneralParameter
Dim privateParameter As SqlParameter
Dim usedEnumerator As IEnumerator = privateParameterList.GetEnumerator()
Try
myConnection = New SqlConnection(myConnectionString)
Dim PrivateDataSet As New DataSet()
myCommand = New SqlCommand(SPName, myConnection)
myCommand.CommandType = CommandType.StoredProcedure
Do While (usedEnumerator.MoveNext())
privateUsedParameter = Nothing
privateUsedParameter = usedEnumerator.Current
privateParameter = ConvertToSqlParameters(privateUsedParameter)
myCommand.Parameters.Add(privateParameter)
Loop
mySqlDataAdapter = New SqlDataAdapter(myCommand)
If TableName = Nothing Then
mySqlDataAdapter.Fill(PrivateDataSet)
Else
mySqlDataAdapter.Fill(PrivateDataSet, TableName)
End If
Return PrivateDataSet
Catch ExceptionObject As Exception
Throw New Exception(privateExceptionMessage, ExceptionObject)
Finally
myConnection.Close()
End Try
End Function
Public Function runTransaction(ByVal SPName As String) As ArrayList
Dim privateUsedParameter As GeneralParameter
Dim privateParameter As SqlParameter
Dim usedEnumerator As IEnumerator = privateParameterList.GetEnumerator()
Dim outputParameters As New ArrayList()
Dim privateParameterOut As SqlParameter
Dim privateConnection As SqlConnection '************ additionally added
Dim privateCommand As New SqlCommand '************ additionally added
Dim privateConnectionString As String '************ additionally added
Try
privateConnection = New SqlConnection(privateConnectionString)
privateCommand = New SqlCommand(SPName, privateConnection)
privateCommand.CommandType = CommandType.StoredProcedure
Do While (usedEnumerator.MoveNext())
privateUsedParameter = Nothing
privateUsedParameter = usedEnumerator.Current
privateParameter = convertToSqlParameters(privateUsedParameter)
privateCommand.parameters.add(privateParameter)
Loop
privateConnection.open()
privateCommand.ExecuteNonQuery()
For Each privateParameterOut In privateCommand.parameters
If privateParameterOut.Direction = ParameterDirection.Output Or privateParameterOut.Direction = ParameterDirection.ReturnValue Then outputParameters.Add(privateParameterOut.Value)
'End If
Next
Return outputParameters
Catch ExceptionObject As Exception
Throw New Exception(privateExceptionMessage, ExceptionObject)
Finally
privateConnection.close()
End Try
End Function
'Public Function returnArrayList(ByVal SPName As String) As ArrayList
'End Function
End Class
'*******************
'General Parameter Class begins
Public Class GeneralParameter
Public Name As String
Public value As Object
Public DataType As SqlDataType
Public Size As Integer
Public DirectionUsed As ParameterDirection
Sub New(ByVal pName As String, _
Optional ByVal pValue As Object = Nothing, _
Optional ByVal pSqlType As SqlDataType = Nothing, _
Optional ByVal pSize As Integer = Nothing, _
Optional ByVal pDirection As ParameterDirection = ParameterDirection.Input)
Name = pName
value = pValue
DataType = pSqlType
Size = pSize
DirectionUsed = pDirection
End Sub
Public Sub BuildParameter(ByVal ParameterName As String, _
Optional ByVal Value As Object = Nothing, _
Optional ByVal SQLType As SQLDataType = Nothing, _
Optional ByVal Size As Integer = Nothing, _
Optional ByVal Direction As ParameterDirection = ParameterDirection.Input)
Dim buildDataType As SqlDbType
Dim buildParameter As GeneralParameter = Nothing
Select Case SQLType
Case SQLDataType.SqlString
buildDataType = SqlDbType.VarChar
Case SqlDataType.SqlChar
buildDataType = SqlDbType.Char
Case SQLDataType.SqlInt
buildDataType = SqlDbType.Int
Case SQLDataType.SqlBit
buildDataType = SqlDbType.Bit
Case SQLDataType.SqlDateTime
buildDataType = SqlDbType.DateTime
Case SQLDataType.SqlDecimal
buildDataType = SqlDbType.Decimal
Case SQLDataType.SqlMoney
buildDataType = SqlDbType.Money
Case SQLDataType.SqlImage
buildDataType = SqlDbType.Image
End Select
buildParameter = New GeneralParameter(ParameterName, Value, buildDataType, Size, Direction)
privateParameterList.Add(buildParameter)
End Sub
Private Function ConvertToSqlParameters(ByVal passedParameter As GeneralParameter) As SqlParameter
Dim returnSqlParameter As SqlParameter = New SqlParameter()
returnSqlParameter.ParameterName = passedParameter.Name
returnSqlParameter.Value = passedParameter.value
returnSqlParameter.SqlDbType = passedParameter.DataType
returnSqlParameter.Size = passedParameter.Size
returnSqlParameter.Direction = passedParameter.DirectionUsed
Return returnSqlParameter
End Function
Public Sub makeClear()
Try
privateParameterList.Clear()
Catch parameterException As Exception
Throw New Exception(privateExceptionMessage & "Parameter List did not clear", parameterException)
End Try
End Sub
End Class
End Namespace
推荐答案
1.未声明privateParameterList(makeclear函数和常规参数的子BuildParameter"中的错误)
溶胶:-privateParameterList在DataServer类中声明,并尝试在GeneralParameter类的方法中使用.
2:-未声明privateExceptionMessage(makeclear函数中的错误)
索尔:与上面讨论的范围相同的问题.
3. SqlDataType未在您的代码中声明.
4.在类DataServer中未声明ConvertToSqlParameters.
我想您应该参考此链接.
在VB.NET中进行面向对象的编程
Hi,
1. privateParameterList is not declared (Error in makeclear function & Sub BuildParameter of General Parameter)
sol:- privateParameterList is declared in class DataServer and trying to use in method of GeneralParameter class.
2:- privateExceptionMessage is not declared (Error in makeclear function)
Sol: same problem of scope as discusses above.
3. SqlDataType is not declare in your code.
4. ConvertToSqlParameters is not declared in class DataServer .
I thik you should refer this link.
Object Oriented Programming In VB.NET
我尝试编写用于修复错误的代码,并且您必须验证其中的逻辑.
Hi,
I try to make for codes to fix bugs, and you must verify the logics inside.
'myVbDataAccessLayer
'Import ADO.net namespaces
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Xml
Imports System.Collections
Imports System.Diagnostics
'Declare the namespace DataService and the Class DataServer
Namespace DataService
Public Class DataServer
Private myConnectionString As String
Private myConnection As SqlConnection
Private myCommand As SqlCommand
Private myDataReader As SqlDataReader
Private myXmlReader As XmlReader
Private mySqlDataAdapter As SqlDataAdapter
Private myDataSet As DataSet
'The variable PrivateParameterList holds parameters which are passed from the Business Layer
Private privateParameterList As ArrayList = New ArrayList()
Private Const privateExceptionMessage As String = "Data Application Error"
'SqlDataType (Enum)
'constructor of DataServer class
Public Sub New(ByVal ConnectionString As String)
myConnectionString = ConnectionString
End Sub
'class methods in the DataServer class
Public Function returnDataSet(ByVal SPName As String, Optional ByVal TableName As String = Nothing) As DataSet
'Accepts a stored procedure and a table name and returns a dataset.
Dim privateUsedParameter As GeneralParameter
Dim privateParameter As SqlParameter
Dim usedEnumerator As IEnumerator = privateParameterList.GetEnumerator()
Try
myConnection = New SqlConnection(myConnectionString)
Dim PrivateDataSet As New DataSet()
myCommand = New SqlCommand(SPName, myConnection)
myCommand.CommandType = CommandType.StoredProcedure
Do While (usedEnumerator.MoveNext())
privateUsedParameter = Nothing
privateUsedParameter = usedEnumerator.Current
privateParameter = GeneralParameter.ConvertToSqlParameters(privateUsedParameter)
myCommand.Parameters.Add(privateParameter)
Loop
mySqlDataAdapter = New SqlDataAdapter(myCommand)
If TableName = Nothing Then
mySqlDataAdapter.Fill(PrivateDataSet)
Else
mySqlDataAdapter.Fill(PrivateDataSet, TableName)
End If
Return PrivateDataSet
Catch ExceptionObject As Exception
Throw New Exception(privateExceptionMessage, ExceptionObject)
Finally
myConnection.Close()
End Try
End Function
Public Function runTransaction(ByVal SPName As String) As ArrayList
Dim privateUsedParameter As GeneralParameter
Dim privateParameter As SqlParameter
Dim usedEnumerator As IEnumerator = privateParameterList.GetEnumerator()
Dim outputParameters As New ArrayList()
Dim privateParameterOut As SqlParameter
Dim privateConnection As SqlConnection '************ additionally added
Dim privateCommand As New SqlCommand '************ additionally added
Dim privateConnectionString As String '************ additionally added
Try
privateConnection = New SqlConnection(privateConnectionString)
privateCommand = New SqlCommand(SPName, privateConnection)
privateCommand.CommandType = CommandType.StoredProcedure
Do While (usedEnumerator.MoveNext())
privateUsedParameter = Nothing
privateUsedParameter = usedEnumerator.Current
privateParameter = GeneralParameter.ConvertToSqlParameters(privateUsedParameter)
privateCommand.parameters.add(privateParameter)
Loop
privateConnection.open()
privateCommand.ExecuteNonQuery()
For Each privateParameterOut In privateCommand.parameters
If privateParameterOut.Direction = ParameterDirection.Output Or privateParameterOut.Direction = ParameterDirection.ReturnValue Then outputParameters.Add(privateParameterOut.Value)
'End If
Next
Return outputParameters
Catch ExceptionObject As Exception
Throw New Exception(privateExceptionMessage, ExceptionObject)
Finally
privateConnection.close()
End Try
End Function
'Public Function returnArrayList(ByVal SPName As String) As ArrayList
'End Function
End Class
'*******************
'General Parameter Class begins
Public Class GeneralParameter
Public Name As String
Public value As Object
Public DataType As SqlDataType
Public Size As Integer
Public DirectionUsed As ParameterDirection
Private privateParameterList As ArrayList = New ArrayList()
Private Const privateExceptionMessage As String = "Data Application Error"
Sub New(ByVal pName As String, _
Optional ByVal pValue As Object = Nothing, _
Optional ByVal pSqlType As SqlDataType = Nothing, _
Optional ByVal pSize As Integer = Nothing, _
Optional ByVal pDirection As ParameterDirection = ParameterDirection.Input)
Name = pName
value = pValue
DataType = pSqlType
Size = pSize
DirectionUsed = pDirection
End Sub
Public Sub BuildParameter(ByVal ParameterName As String, _
Optional ByVal Value As Object = Nothing, _
Optional ByVal SQLType As SQLDataType = Nothing, _
Optional ByVal Size As Integer = Nothing, _
Optional ByVal Direction As ParameterDirection = ParameterDirection.Input)
Dim buildDataType As SqlDbType
Dim buildParameter As GeneralParameter = Nothing
Select Case SQLType
Case SQLDataType.SqlString
buildDataType = SqlDbType.VarChar
Case SqlDataType.SqlChar
buildDataType = SqlDbType.Char
Case SQLDataType.SqlInt
buildDataType = SqlDbType.Int
Case SQLDataType.SqlBit
buildDataType = SqlDbType.Bit
Case SQLDataType.SqlDateTime
buildDataType = SqlDbType.DateTime
Case SQLDataType.SqlDecimal
buildDataType = SqlDbType.Decimal
Case SQLDataType.SqlMoney
buildDataType = SqlDbType.Money
Case SQLDataType.SqlImage
buildDataType = SqlDbType.Image
End Select
buildParameter = New GeneralParameter(ParameterName, Value, buildDataType, Size, Direction)
privateParameterList.Add(buildParameter)
End Sub
Public Shared Function ConvertToSqlParameters(ByVal passedParameter As GeneralParameter) As SqlParameter
Dim returnSqlParameter As SqlParameter = New SqlParameter()
returnSqlParameter.ParameterName = passedParameter.Name
returnSqlParameter.Value = passedParameter.value
returnSqlParameter.SqlDbType = passedParameter.DataType
returnSqlParameter.Size = passedParameter.Size
returnSqlParameter.Direction = passedParameter.DirectionUsed
Return returnSqlParameter
End Function
Public Sub makeClear()
Try
privateParameterList.Clear()
Catch parameterException As Exception
Throw New Exception(privateExceptionMessage & "Parameter List did not clear", parameterException)
End Try
End Sub
End Class
End Namespace
嗨!
当我尝试从另一个名称空间和类调用BUILDPARAMETER时,它说它不是DataService.DataServer的成员.您可以更正代码吗?
**************************************
导入myVbDataAccessLayer.DataService
命名空间BusinessObjects
---------
---------
---------
---------
---------
---------
---------
---------
Hi!
When I try to call BUILDPARAMETER (from another namespace & class), it says the same is not a member of DataService.DataServer. Could you correct the code.
*******************************
Imports myVbDataAccessLayer.DataService
Namespace BusinessObjects
---------
---------
---------
---------
---------
---------
---------
---------
Public Function GetAccountDetail(ByVal cat As String) As DataSet
Dim localDSOutput As DataSet
Dim ParamsStoredProcedure As String = "GetAccountByCat"
Try
Dim localOutPutServer As New DataServer(PrivateConnectionString)
localOutPutServer.BUILDPARAMETER( _
"@AccCat", cat, SqlDataType.SqlChar, , ParameterDirection.Input)
localDSOutput = localOutPutServer.returnDataSet(paramsStoredProcedure)
Return localDSOutput
Catch exceptionObject As Exception
Finally
End Try
End Function
结束类
结束命名空间
End Class
End Namespace
这篇关于数据访问层-SQL 2005-代码错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!