奇怪的SQL服务器问题。取值为null

时间:2011-04-25 18:26:34

标签: c# asp.net sql-server sql-server-2005

Ist screenshot of error Second Error screenshot

我的数据库正在接受针对表定义的空值。查看快照。可能吗?我将colums定义为非null并且它们可以取空值

我从asp.net表单输入数据,并在页面加载时将这些值定义为null。

e.g。 txtUser_id.Text =“”; 。 。

只存储那些未声明为null的值,请参见上面链接中的快照。

4 个答案:

答案 0 :(得分:3)

左侧的星号表示它是一个尚未保存的新行,即根据表定义进行验证的时间。

答案 1 :(得分:1)

textbox.Text=""不是空值。这是一个空字符串。将其插入sql server与Insert '' into...

相同

第一条记录中的“null”值只是空字符串。如果您希望拒绝空字符串,请在C#端验证String.IsNullOrEmpty(txtUser_id.Text),或在SQL端对rtrim(ltrim([insertedValue]))进行验证。

正如@StriplingWarrior所提到的,底线(所有空值)只是一个占位符,直到插入其他记录。

答案 2 :(得分:0)

在SQL Server Management Studio中“编辑”表时,视图底部始终显示一个显示NULL值的行。具有NULL值的此行实际上尚未存在于数据库表中。这就是为什么左侧有*的原因。这是为了您的方便,以便您可以轻松插入值。输入值后,它将验证以确保在实际插入值之前列不为NULL。

如果您在表的第一行中引用 empty 值:empty与NULL不同。你没有任何约束来阻止零长度字符串进入这些列,这就是发生的事情。

答案 3 :(得分:0)

我建议不要使用任何'开放表'的GUI(我不知道确切的名称)。目前尚不清楚您的“数据库”是否接受NULL值,或者这些列是否具有空字符串值。在“查询窗口”中执行以下查询以确定:

SELECT * FROM dbo.Student;

我还建议不要使用术语“快照”来引用更常用的“屏幕截图”,因为“快照”是SQL Server中一个非常具体的术语。 [我最初认为你发布了一个包含数据库快照而不是图像的文件!]

您的ASP.NET代码也可能正在传递空字符串,因为您的示例代码似乎表明了这一点。