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 表单创建新行时,默认值不会出现。
来自评论问题的信息:
- 当我点击新行的 + 时,它没有出现在表单上。
- 当从数据库中添加一行时,默认值就在那里。
- 通过表单添加了一个新行,将具有默认值的字段留空,保存,重新打开,没有默认值。
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
语句,完全省略未指定的值。
我在 Visual studio 中创建了 SQL table 并在字段上设置了默认值。
table 连接到我的 C# 项目(在同一个解决方案中)并顺利通过,但是当通过 windows 表单创建新行时,默认值不会出现。
来自评论问题的信息:
- 当我点击新行的 + 时,它没有出现在表单上。
- 当从数据库中添加一行时,默认值就在那里。
- 通过表单添加了一个新行,将具有默认值的字段留空,保存,重新打开,没有默认值。
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
语句,完全省略未指定的值。