Com+高手请进
我用RegSvcs注册Com+时出现以下错误:
Warning:the class ‘SampleOrderCom.RuleAutoGen’ has no class interface,which means that unmanaged late bound calls cannot take advantage of AutoComplete methods,
RuleAutoGen类的代码如下:
Imports System.EnterpriseServices
Imports System.Data.SqlClient
<Transaction(TransactionOption.Required)> Public Class RuleAutoGen
Inherits ServicedComponent
Private Conn As SqlConnection
Private Cmd As SqlCommand
Private myReader As SqlDataReader
Private variable_value As String
Private running_num As Int32
Private new_running_num As Integer
Private autoGenNum As String
Private years As String
Private YearReader As SqlDataReader
Private desc As String
<AutoComplete> Public Function updateNum(ByVal vVariable As String, _
ByVal vDepartment As String, ByVal vDivision As String, Optional ByVal vNum As Integer = 1) As String
autoGenNum = "-1"
Conn = Connection.ConnectionFactory()
Try
Dim sqlYears As String = "select substring(cast(year(getdate()) as varchar (4)),3,2) as years"
Dim CmdYears As New SqlCommand(sqlYears, Conn)
Dim sqlString As String = _
"SELECT variable_value, variable_running_num,description FROM m_system_variable" & _
" WHERE variable = @variable" & _
" AND department = @department" & _
" AND division = @division"
Cmd = New SqlCommand(sqlString, Conn)
'Cmd.ExecuteNonQuery()
Dim parmVariable As SqlParameter
parmVariable = Cmd.Parameters.Add("@variable", SqlDbType.Char, 25)
parmVariable.Direction = ParameterDirection.Input
parmVariable.Value = vVariable
Dim parmDepartment As SqlParameter
parmDepartment = Cmd.Parameters.Add("@department", SqlDbType.Char, 10)
parmDepartment.Direction = ParameterDirection.Input
parmDepartment.Value = vDepartment
Dim parmDivision As SqlParameter
parmDivision = Cmd.Parameters.Add("@division", SqlDbType.Char, 8)
parmDivision.Direction = ParameterDirection.Input
parmDivision.Value = vDivision
myReader = Cmd.ExecuteReader
If (myReader.Read()) Then
variable_value = myReader.GetString(0)
running_num = myReader.GetInt32(1)
desc = myReader.GetString(2)
End If
myReader.Close()
YearReader = CmdYears.ExecuteReader
If YearReader.Read() Then
years = YearReader.GetString(0)
End If
YearReader.Close()
Select Case running_num
Case 1 To 9
autoGenNum = variable_value & "-" & years & "-" & "000" & running_num
Case 10 To 99
autoGenNum = variable_value & "-" & years & "-" & "00" & running_num
Case 100 To 999
autoGenNum = variable_value & "-" & years & "-" & "0" & running_num
Case 1000 To 9999
autoGenNum = variable_value & "-" & years & "-" & running_num
Case Else
autoGenNum = "-1" 'Error No.
End Select
new_running_num = running_num + vNum
If new_running_num <= 10000 Then
sqlString = "UPDATE m_system_variable SET variable_running_num = " & _
"@running_num WHERE variable = @variable" & _
" AND department = @department" & _
" AND division = @division"
Cmd.CommandText = sqlString
Dim parmRunningNum As SqlParameter
parmRunningNum = Cmd.Parameters.Add("@running_num", SqlDbType.Int, 4)
parmRunningNum.Direction = ParameterDirection.Input
parmRunningNum.Value = new_running_num
Cmd.ExecuteNonQuery()
End If
Conn.Close()
Catch e As Exception
'Console.WriteLine(e)
Throw e
Finally
If Not (Conn Is Nothing) Then
Conn.Close()
End If
End Try
Return autoGenNum
End Function
End Class
我感觉就是因为用了<AutoComplete>这个我特性后出错,我应该怎么修改,谢谢!!!
Warning:the class ‘SampleOrderCom.RuleAutoGen’ has no class interface,which means that unmanaged late bound calls cannot take advantage of AutoComplete methods,
RuleAutoGen类的代码如下:
Imports System.EnterpriseServices
Imports System.Data.SqlClient
<Transaction(TransactionOption.Required)> Public Class RuleAutoGen
Inherits ServicedComponent
Private Conn As SqlConnection
Private Cmd As SqlCommand
Private myReader As SqlDataReader
Private variable_value As String
Private running_num As Int32
Private new_running_num As Integer
Private autoGenNum As String
Private years As String
Private YearReader As SqlDataReader
Private desc As String
<AutoComplete> Public Function updateNum(ByVal vVariable As String, _
ByVal vDepartment As String, ByVal vDivision As String, Optional ByVal vNum As Integer = 1) As String
autoGenNum = "-1"
Conn = Connection.ConnectionFactory()
Try
Dim sqlYears As String = "select substring(cast(year(getdate()) as varchar (4)),3,2) as years"
Dim CmdYears As New SqlCommand(sqlYears, Conn)
Dim sqlString As String = _
"SELECT variable_value, variable_running_num,description FROM m_system_variable" & _
" WHERE variable = @variable" & _
" AND department = @department" & _
" AND division = @division"
Cmd = New SqlCommand(sqlString, Conn)
'Cmd.ExecuteNonQuery()
Dim parmVariable As SqlParameter
parmVariable = Cmd.Parameters.Add("@variable", SqlDbType.Char, 25)
parmVariable.Direction = ParameterDirection.Input
parmVariable.Value = vVariable
Dim parmDepartment As SqlParameter
parmDepartment = Cmd.Parameters.Add("@department", SqlDbType.Char, 10)
parmDepartment.Direction = ParameterDirection.Input
parmDepartment.Value = vDepartment
Dim parmDivision As SqlParameter
parmDivision = Cmd.Parameters.Add("@division", SqlDbType.Char, 8)
parmDivision.Direction = ParameterDirection.Input
parmDivision.Value = vDivision
myReader = Cmd.ExecuteReader
If (myReader.Read()) Then
variable_value = myReader.GetString(0)
running_num = myReader.GetInt32(1)
desc = myReader.GetString(2)
End If
myReader.Close()
YearReader = CmdYears.ExecuteReader
If YearReader.Read() Then
years = YearReader.GetString(0)
End If
YearReader.Close()
Select Case running_num
Case 1 To 9
autoGenNum = variable_value & "-" & years & "-" & "000" & running_num
Case 10 To 99
autoGenNum = variable_value & "-" & years & "-" & "00" & running_num
Case 100 To 999
autoGenNum = variable_value & "-" & years & "-" & "0" & running_num
Case 1000 To 9999
autoGenNum = variable_value & "-" & years & "-" & running_num
Case Else
autoGenNum = "-1" 'Error No.
End Select
new_running_num = running_num + vNum
If new_running_num <= 10000 Then
sqlString = "UPDATE m_system_variable SET variable_running_num = " & _
"@running_num WHERE variable = @variable" & _
" AND department = @department" & _
" AND division = @division"
Cmd.CommandText = sqlString
Dim parmRunningNum As SqlParameter
parmRunningNum = Cmd.Parameters.Add("@running_num", SqlDbType.Int, 4)
parmRunningNum.Direction = ParameterDirection.Input
parmRunningNum.Value = new_running_num
Cmd.ExecuteNonQuery()
End If
Conn.Close()
Catch e As Exception
'Console.WriteLine(e)
Throw e
Finally
If Not (Conn Is Nothing) Then
Conn.Close()
End If
End Try
Return autoGenNum
End Function
End Class
我感觉就是因为用了<AutoComplete>这个我特性后出错,我应该怎么修改,谢谢!!!
...全文
相关推荐
COM与COM+从入门到精通(pdf版本,含源码)
本文深入讲解COM与COM+技术核心原理及应用实践,涵盖组件创建、接口调用、类工厂实现与DLL生命周期管理。通过完整源码演示了客户端如何调用COM组件,包括IDispatch使用、自动化服务调用及线程
COM+编程 (COM+ PROGRAMMING)
随着COM+的出现,MTS被集成到COM+服务中,功能更加丰富和完善。4. **COM+应用程序**:COM+应用程序是一组相互协作的组件,它们共享相同的配置和运行时环境。
COM+ 技术大全COM+ 技术大全
COM+技术大全是一本深入探讨COM+(Component Object Model Plus)技术的专业书籍,它涵盖了COM+的核心概念、架构以及在实际应用中的各种实践。
COM 与 COM+ 从入门到精通
《COM与COM+从入门到精通》是一本面向编程人员的技术书籍,旨在帮助读者快速掌握COM和COM+编程,以及如何部署相应应用程序。
COM与COM+从入门到精通
在COM的基础上,微软进一步发展了COM+技术,它不仅包含了COM的所有功能,还添加了许多高级服务,如事务处理、安全性、事件路由、资源管理等。


