小编A. *_*son的帖子

为什么从short到int的转换失败?

我们有一些代码将数据从Microsoft Access数据库存档到MS SQL Server数据库中.假设我们已经从Access表填充了数据读取器,并且我们正在为SqlCommand添加一个参数以准备插入,我们有一个失败的类型转换.这是代码:

oSqlServerDbCmd_ForInsert.Parameters.AddWithValue("@Duration",
     (int) oReader["Duration"]);
Run Code Online (Sandbox Code Playgroud)

oReader中的字段实际上是一个Access Integer,它是C#的简称.如果我们在这里投短,那就没问题了.但是,如果我们转换为int,则代码会抛出InvalidCastException.我可能会误解MSDN文档:

"有一个预定义的从short到int,long,float,double或decimal的隐式转换."

...但听起来这应该有效(我的理由是,如果定义了隐式转换,为什么显式类型转换不起作用?).我意识到转换甚至不是必需的,因为AddWithValue接受了一个对象,所以我们实际上已经从我们的代码中移除了转换,但我希望看到一个解释为什么这个转换失败,以防万一我们遇到这样的事情未来.

c# sql boxing casting

13
推荐指数
2
解决办法
1万
查看次数

IDE错误检测和自动完成的复杂性取决于语言语法?

是否需要更少的检查/不那么严格的代码分析来提供开发环境错误反馈和自动完成编程语言,这些编程语言主要由人类可读的短语和单词组成(即Python,VB.NET)?这与C风格的语言形成对比,后者更多地依赖于代码结构的符号和标点符号.

static-analysis pre-compilation

6
推荐指数
1
解决办法
187
查看次数

VB6:跨所有用户会话的单实例应用程序

我有一个应用程序需要是Windows PC上所有用户会话的单实例应用程序.到目前为止,我的研究主要集中在使用互斥体来实现这一目标,但我遇到了一个问题,我不确定这是一个真正的问题,我认为这是一个最佳实践问题.

首先是代码:

Private Const AppVer = "Global\UNIQUENAME" ' This is not what i am using but the name is unique

Public Sub Main()

    Dim mutexValue As Long

    mutexValue = CreateMutex(ByVal 0&, 1, AppVer)
    If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
        SaveTitle$ = App.Title
        App.Title = "... duplicate instance."
        MsgBox "A duplicate instance of this program exists."
        CloseHandle mutexValue
        Exit Sub
    End If
    ' Else keep on truckin'
Run Code Online (Sandbox Code Playgroud)

现在,根据这篇文章,我相信我理解通过将NULL指针传递给CreateMutex函数,就像我上面一样,我基本上分配了与当前登录用户相关联的任何安全描述符.

如果这意味着我的想法(我可能需要更多指导)告诉我其他登录的用户将无法"看到"在原始用户会话下创建的互斥锁,也无法创建具有相同名称的互斥锁.

现在,经验证据似乎支持了这一点.我使用了一个消息框来弹出我收到的"LastDLLError",当另一个用户试图启动应用程序时(虽然它已经在另一个用户帐户下运行),我会收到一个ERROR_ACCESS_DENIED代码.我可以对此进行测试以及ERROR_ALREADY_EXISTS代码并且只是退出/或.然而,这感觉有点hackish,我想知道是否有人可以提出替代方案."正确"的做法似乎是将正确的指针传递给CreateMutex函数,这样任何用户都有权查看任何现有的互斥体(mutices?),但我不确定这是否可能没有当前登录用户是管理员(不易察觉).非常感谢任何协助/指导.提前致谢!

vb6 mutex single-instance

5
推荐指数
1
解决办法
3117
查看次数