【问题标题】:Visual studio SQL default value not showing on windows form when adding new record添加新记录时,Visual Studio SQL 默认值未显示在 Windows 窗体上
【发布时间】:2018-06-16 07:56:17
【问题描述】:

我在 Visual Studio 中创建了一个 SQL 表,并为字段设置了默认值。

该表已连接到我的 C# 项目(在同一解决方案中)并且可以正常运行,但是通过 Windows 窗体创建新行时不会出现默认值。

来自评论问题的信息:

  • 当我单击新行的 + 时,它不会出现在表单上。
  • 当从数据库中添加一行时,默认值就在那里。
  • 通过表单添加了一个新行,将默认值的字段留空,保存,重新打开并且没有默认值。

【问题讨论】:

  • 您的意思是保存时没有在数据库中设置默认值,还是保存前没有出现在表单应用程序中?
  • @SBFrancies 当我单击新行的 + 时,它不会出现在表单上
  • 如果您在没有为该列指定值的情况下进行插入,则默认值将出现在数据库中。如果您想以我认为您必须在代码中手动设置的形式自动设置它。
  • 在表单上新建一行时不能自动拉到文本框中吗?
  • @Matt 您可以通过编程方式添加它,但 SQL Server 中使用的默认值选项是在此列中没有提供值时分配一个值

标签: c# sql sql-server visual-studio default-value


【解决方案1】:

基于此W3Schools Tutorials

如果没有指定其他值,默认值将添加到所有新记录中。

因此,在将行保存到数据库之前,默认值不会显示,您可以通过编程方式添加它,但如果此列中没有提供值,则使用默认值约束来分配值

您可以save these default values in the application Settings 并在添加新行时使用它

textBox1.Text = Properties.Settings.Default.TextBoxDefaultValue;

如果您在 Visual Studio 中定义默认值时遇到问题,请尝试使用 SQL 查询添加默认约束:

ALTER TABLE XXX 
ADD CONSTRAINT def_Retired
DEFAULT 'N' FOR Retired;

更新 1

在表单设计器上,单击 BindingNavigator,在“属性”窗口中将 AddNewItem 属性设置为 (none)

尝试将以下代码添加到bindingNavigatorAddNewItem_Click 事件中

private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) {

 vehiclesBindingSource.AddNew();
 Textbox1.Text = Properties.Settings.Default.Text1default;

};

【讨论】:

  • 我在一个类似的表单上收到一个错误,当我单击添加新的时,员工 ID 不能为空。它也没有xxsource.EndEdit();
  • 对employeeID有什么限制?记得做这一步On the form designer, click on the BindingNavigator, In the Properties window set the AddNewItem property to (none)
  • 这是我错过的步骤 :) 我要把它写下来!
【解决方案2】:

当我点击新行的 + 时,它不会出现在表单上。

DataGridView 对数据库表中的默认值一无所知。因此,您必须在specifyDataGridView 中使用默认值。

或者如果您使用数据绑定,您可以在DataTable 中设置specify 默认值。


当从数据库中添加一行时,默认值就在那里。

没错,因为在数据库中它们是设置好的。


通过表单添加了一个新行,将默认值的字段留空,保存,重新打开并且没有默认值。

如果你以如下方式向数据库中插入数据:

insert into SomeTable ('Retired') values ('');

那么将不使用默认值。很有可能我可以假设目前您从 DataGridView 传递空值,如果它们没有设置的话。这是错误的!

如果你以如下方式向数据库中插入数据:

insert into SomeTable ('Last Mileage') values (0);

然后将使用Retired 列的默认值。应该是这样的。

因此,您必须正确设计Insert 语句,完全省略那些应该在数据库本身中使用默认值的列。


总结。您要么必须在DataGridView/DataTable 中填写默认值,要么动态构造Insert 语句,完全省略未指定的值。

【讨论】:

    【解决方案3】:

    您在动态生成的表单中分配默认值。您可能需要评估您的客户端/服务器端脚本的组件是否也可以同时适应这种动态行为。

    【讨论】:

      【解决方案4】:

      默认约束仅当您未在插入列表中指定列时才有效。

      假设我有一张这样的桌子

      CREATE TABLE MyInfo
      (
          Id INT IDENTITY(1,1),
          Nm VARCHAR(50),
          MyDate DATE DEFAULT(GETDATE())
      )
      

      我正在指定这样的值

      INSERT INTO MyInfo
      (
          Nm,
          MyDate
      )
      SELECT
          Nm = 'A',
          MyDate = '02/23/93'
      UNION
      SELECT
          Nm = 'B',
          MyDate = NULL
      

      结果会是这样的

      现在我插入一行而不指定MyDate

      INSERT INTO MyInfo
      (
          Nm
      )
      VALUES('C')
      

      MyDate 填充了默认值

      默认约束旨在在插入列表中未指定列的情况下分配值。如果您需要在插入的值为 NULL 或为空的情况下设置默认值,请尝试使用触发器

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-13
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        相关资源
        最近更新 更多