【问题标题】:Strange sql server issue. Taking null values while奇怪的 sql server 问题。取空​​值同时
【发布时间】:2011-04-25 18:26:34
【问题描述】:

Ist screenshot of error Second Error screenshot

我的数据库正在接受与表定义相反的空值。见快照。是否可以?我将列定义为不为空,它们可以采用空值

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

例如txtUser_id.Text =""; . . .

只有那些未被声明为空的值被存储,见上面链接中的快照。

【问题讨论】:

  • 在 SQL 查询窗口中执行 SELECT * FROM student。你看到里面有两条记录吗?我认为您只是看到了可以在第一个快照中输入的新记录。
  • 谢谢。我不知道(现在我知道)空字符串和空字符串。
  • 您会编辑您的问题(标题)以更清楚地了解您要问的问题吗?另外,请将“snapshot”替换为“screenshot”,因为snapshot是一个非常具体的术语,尤其是对于SQL Server。

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


【解决方案1】:

左侧的星号表示它是尚未保存的新行,此时将根据表定义对其进行验证。

【讨论】:

  • “新”行上的星号表示列出的所有其他行都没有保存?
  • @Kenny Evitt:不。SSMS“打开表”查看器中只有一个新行
  • 哦!我假设第一个屏幕截图(“快照”)中的相关行是带有数据的行!我有没有提到我避免使用“打开表格”窗口?
  • @Kenny Evitt:我也是... :-) 我宁愿使用 MS Access,呵呵
【解决方案2】:

textbox.Text="" 不是空值。它是一个空字符串。插入到sql server 和说Insert '' into...是一样的

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      SELECT * FROM dbo.Student;
      

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

      您的 ASP.NET 代码也可能传递空字符串,正如您的示例代码所表明的那样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多