Com+高手请进

wqjch 2005-03-05 01:52:09
我用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>这个我特性后出错,我应该怎么修改,谢谢!!!
...全文
121 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqjch 2005-03-08
  • 打赏
  • 举报
回复
加上属性:ClassInterface(ClassInterfaceType.None)
和Imports System.Runtime.InteropServices
加在哪啊
wqjch 2005-03-08
  • 打赏
  • 举报
回复
加上属性:ClassInterface(ClassInterfaceType.None)
和Imports System.Runtime.InteropServices
加在上啊
xiaolang88 2005-03-06
  • 打赏
  • 举报
回复
加上属性:ClassInterface(ClassInterfaceType.None)
和Imports System.Runtime.InteropServices

hamadou 2005-03-05
  • 打赏
  • 举报
回复
虽然不会,帮你up!
本工具多次测试均未出现问题,可以使用,如果发现自己无法使用,请先看下面介绍与说明 谢谢!! 感谢驴友yxrsys,在verycd发布资源 非安装软件,直接双击运行,傻瓜式修复,可运行于32位和64位系统和WINPE系统 程序根据当前系统non-Unicode设置自动显示中/英界面 "自动修复"自动判断和系统启动有关的条件并自动修复程序支持的盘符上的NT系统启动,无需用户手工干预 "高级修复"只供特殊需要的朋友,参看下面应用实例中的高级修复部分 PE中自动判断PE环境,单硬盘可以直接"自动修复",如多硬盘在PE中修复时推荐使用"高级"修复选择你作为系统引导的盘符 适用范围: -------- 1.启动菜单/启动文件丢失修复: 适用所有NT5.x(2000/XP/2003)和NT6.x(Vista/2008/Win7/2008r2) 2.修复其他因BCD相关引起的故障 a. Win7/2008r2中 BCD 的修复计算机(Windows Recovery Environment)菜单丢失 b. Win7/2008r2中 BCD 引起的3D启动画面丢失(变成VISTA滚动条启动画面) c. BCD 引起的启动菜单选择界面乱码现象 3.系统BCD非法的强制修复 - 现象:Vista/2008/Win7/2008r2中 a. 运行msconfig后"启动"或"引导"栏空白 b. 管理员身份运行命令提示符中后运行bcdedit等和BCD相关的操作提示出错 c. 系统属性的"启动和故障恢复"窗口无法配置"默认操作系统"和"等待时间" d. 其他软件无法添加/删除/修改基于 BCD 管理的新启动菜单 注: 3的这种情况是否要强制修复自行决定。 额外功能: 为VISTA/2008添加修复计算机(Windows Recovery Environment)菜单 使用方法:在系统盘符中新建recovery文件夹,再把光盘或安装程序中的boot\boot.sdi和sources\boot.wim复制至 recovery文件夹,再运行本程序,即可自动添加。 修复效果: 存在原BCD或Boot.ini时程序将予备份,备份文件名/路径在修复完成后给出提示 NT5.x菜单在boot.ini中以"Microsoft Windows Server 2003 x86"形式存在 NT6.x菜单在BCD中以"Windows Server ® 2008 Standard x86"形式存在 NT6.x的修复过程提示成功即时写入生效,NT5.x的修复在最后完成后再一并写入生效 NT5.x支持最多同接8个硬盘时的修复,但如果不同接口硬盘混用且三个或以上硬盘就未必能准确判断硬盘号,三硬盘以上 并混用的情况就算微软自己的控制台都未必能准确判断 NT6.x理论无限制硬盘数,也不限制混用 根据当前系统non-Unicode设置决定修复后的启动菜单中/英优先级 NT5.x+NT6.x的多系统中 - 当存在多个NT5.x时,修复后BCD显示的NT5.x相应菜单为“Earlier Version of Windows”, 当只有一个NT5.x系统,修复后BCD中显示的NT5.x相应菜单则为类如"Microsoft Windows Server 2003 x86"格式 不修复NT5.x的Boot.ini和NT6.x的BCD中的多余的启动菜单 因为精简版的精简程度无从判断,所以不保证能修复精简版系统启动故障 自BCDautofix发布以来极少回答一些朋友在使用上的疑问,这里和NTBOOTautofix一并释疑 一、BUG报告:readme中写的邮箱我极少打开,所以未必能及时回信。 二、请不要拿本工具和EasyBCD或VistaBoorPro等工具作比较: 那类工具重在管理 - 如改启动菜单名,添加/删除菜单等,要用在修复功能上需要使用者自己了解故障原因和解决流程后 才能手工修复,多数情况下其手工也无法完美修复。 而本工具重在修复,修复功能大多是那类工具无法实现的,当然本工具也不能实现那类工具的管理操作。 三、程序用批处理编写:请看不起批处理的免下载使用而避免下载后浪费诸多表情 四、如不能修复请自己先了解一下是否程序适用范围内:例如有些硬件原因引起的3D启动画面不存在,象这类的非BCD引起的类似故障是此工具无法处理的 五、手工处理教程为什么不写:其实以前曾经写过很多,但并不多人看,有时一个“活动分区”的识别就要大花唇舌说明,一句bcdedit /set {ntldr} description "Microsoft Windows XP"或bootsect /nt60 sys可以解决的手工处理方式不少人都

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧