Visual studio SQL 默认值在添加新记录时未显示在 windows 表单上

Visual studio SQL default value not showing on windows form when adding new record

我在 Visual studio 中创建了 SQL table 并在字段上设置了默认值。

table 连接到我的 C# 项目(在同一个解决方案中)并顺利通过,但是当通过 windows 表单创建新行时,默认值不会出现。

来自评论问题的信息:

基于此W3Schools Tutorials

The default value will be added to all new records IF no other value is specified.

所以在将行保存到数据库之前默认值不会显示,您可以通过编程添加它,但是默认值约束用于在该列中没有提供值时分配值

您可以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,在属性 window 中将 AddNewItem 属性 设置为 (none)

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

private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) {

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

};

您正在为动态生成的表单指定默认值。您可能需要评估您的客户端 side/server 端脚本的组件是否也被用来并行适应这种动态行为。

默认约束仅在您未在插入列表中指定列时才起作用。

假设我有一个Table像这样

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 或为空的情况下设置默认值,请尝试使用触发器

It doesn't appear on the form when I click the + for a new row.

DataGridView 对数据库 table 中的默认值一无所知。因此,您必须 specify DataGridView.

中的默认值

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


When a row is added from the database the defaults are there.

没错,因为在数据库中设置了它们。


Added a new row via the form, left the fields with default values blank, saved, re opened and no default values.

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

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

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

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

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

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

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


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