我理解为什么null + 1或(1 + null)返回null:null意味着"未知值",如果值未知,其后继者也是未知的.对于涉及null的大多数其他操作也是如此.[*]
但是,我不明白为什么会发生以下情况:
SELECT SUM(someNotNullableIntegerField) FROM someTable WHERE 1=0
Run Code Online (Sandbox Code Playgroud)
此查询返回null.为什么?这里没有未知的值!WHERE子句返回零记录,并且一组空值的总和是0.[**]注意该集合不是未知的,它已知为空.
我知道我可以通过使用ISNULL或解决这种行为COALESCE,但我试图理解为什么这种行为对我来说是违反直觉的.
关于为什么这有意义的任何见解?
[*]有一些值得注意的例外,例如null OR true,显然true是正确的结果,因为未知值无关紧要.
[**]就像一组空值的产物一样1.从数学上来说,如果我要延长$(Z,+)$到$(Z联盟{NULL},+)$,对标识元素显而易见的选择仍然是0不null,因为x + 0 = x不过x + null = null.
如何在参数varbinary数据类型中添加空值?
当我执行以下代码时:
using (SqlConnection myDatabaseConnection1 = new SqlConnection(myConnectionString.ConnectionString))
{
using (SqlCommand mySqlCommand = new SqlCommand("INSERT INTO Employee(EmpName, Image) Values(@EmpName, @Image)", myDatabaseConnection1))
{
mySqlCommand.Parameters.AddWithValue("@EmpName", textBoxEmpName.Text);
mySqlCommand.Parameters.AddWithValue("@Image", DBNull.Value);
myDatabaseConnection1.Open();
mySqlCommand.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下内容System.Data.SqlClient.SqlException:
不允许从数据类型nvarchar到varbinary(max)的隐式转换.使用CONVERT函数运行此查询.
在常规aspx页面,我有活动,如Page_Init,Page_Unload等,这发生在一个定义良好的秩序.
我有一个asmx提供[WebMethod()]s 的页面.是否存在类似的事件?特别是,一些允许我初始化一些数据(如Page_Load)并进行一些清理(如Page_Unload)的事件将非常有用.
(据我所知,asmx代码隐藏类的构造函数似乎在每个WebMethod请求上被调用,即,为每个WebMethod请求创建一个新实例,但这只是一个观察而不是我发现的东西在某处记录...)
注意:此问题类似于如何在发布模式构建中阻止XML文档文件的副本?,但它不一样,那里的答案不适用.请继续阅读以找出原因.(如果您不同意,请在评论或聊天中询问,我很乐意精心制作).
我有一个库项目(myLibrary)和一个引用该库的ASP.NET Web应用程序项目(两者都在同一个解决方案中).检查库项目的"生成XML文档文件",因为我希望在开发时具有那些不错的IntelliSense功能.
当我发布 Web应用程序(项目上的上下文菜单/发布...)时,它只将运行应用程序所需的文件(无源代码等)复制到某个发布目录.非常好.不幸的是,它还复制了库的XML文档文件.由于我认为我们图书馆的文档是商业秘密,我不希望它最终出现在客户的服务器上.因此,我们必须记住在部署之前从发布目录中手动删除此文件.
有没有办法阻止 Visual Studio在发布ASP.NET项目时复制此文件,但在开发时仍然保留XML文档IntelliSense的好处?
标题基本上都说明了一切.我得到三个用户提供的整数(year,month,day)1从旧的数据库(我不能改变).目前,我使用以下代码将这些整数解析为DateTime结构:
try {
return new DateTime(year, month, day);
} catch (ArgumentException ex) {
return DateTime.MinValue;
}
Run Code Online (Sandbox Code Playgroud)
有时,这些值不代表有效日期(是的,用户输入类似1999-06-31的内容,不,遗留应用程序没有验证这一点).由于在数据验证失败时抛出异常被认为是不好的做法,我宁愿用无异常代码替换它.但是,我能找到的唯一解决方案是将整数转换成一个字符串和TryParseExact这个字符串,这对我来说似乎更加丑陋.我错过了一些明显更好的解决方案吗
1实际上,它是YYYYMMDD格式的一个整数,但将其转换为年,月和日是微不足道的......
请考虑以下最小示例:
Module Module1
Private Enum MyEnum
A
End Enum
Public Sub Main(args As String())
AreEqual(CType(0, MyEnum), MyEnum.A) ' Error here
End Sub
Private Function AreEqual(Of T)(item1 As T, item2 As T) As Boolean
Return False
End Function
Private Function AreEqual(item1 As Object, item2 As Object) As Boolean
Return False
End Function
End Module
Run Code Online (Sandbox Code Playgroud)
由于某些奇怪的原因,标记为"Error here"的行中的重载解析失败:
错误6重载决策失败,因为没有可访问的'AreEqual'对这些参数最具体:
Private Function AreEqual(item1 As Object, item2 As Object) As Boolean:不是最具体的.
Private Function AreEqual(Of MyEnum)(item1 As MyEnum, item2 As MyEnum) As Boolean:不是最具体的.
为什么第二个功能不是"最具体"的? …
以下代码
Sub Foo(i As Int32?)
Select Case i
Case Nothing ' <-- warning here
' Do something
Case 0
' Do something else
Case Else
' Do something different
End Select
End Sub
Run Code Online (Sandbox Code Playgroud)
产生以下警告:
警告BC42037:此表达式将始终计算为Nothing(由于来自equals运算符的空传播).要检查值是否为null,请考虑使用"Is Nothing".
Case Is Nothing但是,会产生语法错误:
错误BC30239:期望关系运算符.
有没有办法使用Select Case可以为空的值类型和案例的case子句Nothing?
简介:我们的一个Web应用程序需要写入权限C:\Windows\Temp.但是,无论我多么削弱NTFS权限,procmon都会显示出来ACCESS DENIED.
背景(这可能是也可能不是相关的问题):我们正在使用OLEDB访问MS Access数据库(位于外的C:\ WINDOWS\TEMP).不幸的是,这个OLEDB驱动程序需要对用户配置文件的TEMP目录(在IIS 7.5下运行时恰好是C:\ Windows\Temp)的写访问权限,否则抛出可怕的"未指定错误"OleDbException.有关详细信息,请参见KB 926939.我按照知识库文章中的步骤操作,但它没有帮助.
细节:
这是输出icacls C:\Windows\Temp.出于调试目的,我给予了完全权限Everyone.
C:\Windows\Temp NT AUTHORITY\SYSTEM:(OI)(CI)(F)
CREATOR OWNER:(OI)(CI)(IO)(F)
BUILTIN\IIS_IUSRS:(OI)(CI)(S,RD)
BUILTIN\Users:(CI)(S,WD,AD,X)
BUILTIN\Administrators:(OI)(CI)(F)
Everyone:(OI)(CI)(F)
Run Code Online (Sandbox Code Playgroud)
但是,这是procmon的截图:

Desired Access: Generic Read/Write, Delete
Disposition: Create
Options: Synchronous IO Non-Alert, Non-Directory File, Random Access, Delete On Close, Open No Recall
Attributes: NT
ShareMode: None
AllocationSize: 0
Impersonating: MYDOMAIN\myuser
Run Code Online (Sandbox Code Playgroud)
PS:登录时MYDOMAIN\myuser,我可以C:\Windows\Temp使用Windows资源管理器创建文件,没有任何问题.
编辑:web.config的相关部分:
<authentication mode="Windows" />
<identity impersonate="true" /> …Run Code Online (Sandbox Code Playgroud) 我需要开发一个WCF服务器(基本上是一个最终将在IIS中运行的Web服务)和一个访问该服务的客户端应用程序.我在同一个Visual Studio(2008)解决方案中同时拥有客户端和服务器项目.
在开发过程中将客户端连接到服务器的推荐方法是什么?
我想到了两种可能的解决方案:一种是在每次更改后将服务器项目部署到某个IIS,另一种是启动两个Visual Studio实例并使用固定的TCP端口(Visual-Studio集成)服务器项目的Web服务器.
由于这些选项对我来说都不是特别优雅,我想知道我是否可能忽略了明显的"正确方法"来做到这一点......
我有页面A和页面B.您可以在页面A中执行以下操作:
Response.Redirect.现在问题如下:
会发生什么:网页A 的初始状态 显示.
我想要发生的事情:显示最终状态的页面A (即,在列表框中选择"正确"项目).
我知道ScriptManager.AddHistoryPoint!据我所知,它并没有解决我的问题:
AddHistoryPoint 每次在第A页上完成某些操作时我都可以打电话.这很糟糕,因为它会在浏览器历史记录中包含大量条目.(每次选择不同的列表框项时都会有一个新条目.)但这正是我想通过使用UpdatePanel来避免的!当然,如果有一种ReplaceLastHistoryPoint方法,那将是完美的,但我没有找到一个......
我试图在AddHistoryPoint之前调用Response.Redirect,只保存页面A 的最后一个状态,但是,唉,这不起作用(没有保存历史记录点).考虑到Response.Redirect工作原理,这并不奇怪.
我错过了一些解决方案吗?我正在使用.NET 3.5SP1,以防万一.
c# ×6
.net ×4
asp.net ×4
vb.net ×3
web-services ×2
asmx ×1
asp.net-ajax ×1
casting ×1
datetime ×1
dbnull ×1
debugging ×1
deployment ×1
enums ×1
iis-7 ×1
null ×1
parameters ×1
permissions ×1
publish ×1
sql-server ×1
updatepanel ×1
validation ×1
wcf ×1
windows-7 ×1
winforms ×1