C# 添加新记录时,windows窗体上未显示Visual studio SQL默认值
我在VisualStudio中创建了一个SQL表,并在字段上设置了一个默认值 该表连接到我的C#项目(在同一个解决方案中),可以很好地完成,但是通过windows窗体创建新行时,默认值不会出现 评论问题的信息:C# 添加新记录时,windows窗体上未显示Visual studio SQL默认值,c#,sql,sql-server,visual-studio,default-value,C#,Sql,Sql Server,Visual Studio,Default Value,我在VisualStudio中创建了一个SQL表,并在字段上设置了一个默认值 该表连接到我的C#项目(在同一个解决方案中),可以很好地完成,但是通过windows窗体创建新行时,默认值不会出现 评论问题的信息: 当我为新行单击+时,它不会显示在窗体上 当从数据库中添加一行时,默认值就存在了 通过表单添加新行,保留默认值为空、已保存、重新打开且没有默认值的字段 基于此 如果未指定其他值,则默认值将添加到所有新记录中 因此,在将行保存到数据库之前,默认值不会显示。您可以通过编程方式添加该行,但
- 当我为新行单击+时,它不会显示在窗体上李>
- 当从数据库中添加一行时,默认值就存在了
- 通过表单添加新行,保留默认值为空、已保存、重新打开且没有默认值的字段
- 基于此
如果未指定其他值,则默认值将添加到所有新记录中
因此,在将行保存到数据库之前,默认值不会显示。您可以通过编程方式添加该行,但如果此列中没有提供值,则使用默认值约束指定值
您可以在添加新行时使用它
textBox1.Text = Properties.Settings.Default.TextBoxDefaultValue;
如果在Visual Studio中定义默认值时遇到问题,请尝试使用SQL查询添加默认约束:
ALTER TABLE XXX
ADD CONSTRAINT def_Retired
DEFAULT 'N' FOR Retired;
更新1
在表单设计器上,单击BindingNavigator,在属性窗口中将AddNewItem
属性设置为(无)
尝试将以下代码添加到bindingNavigatorAddNewItem\u单击事件
private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) {
vehiclesBindingSource.AddNew();
Textbox1.Text = Properties.Settings.Default.Text1default;
};
您正在动态生成的表单中指定默认值。您可能需要评估客户端/服务器端脚本的组件是否也能够并行地适应这种动态行为 只有在未指定插入列表中的列时,默认约束才起作用
假设我有一张这样的桌子
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
结果是这样的
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或空时设置默认值,请尝试使用触发器
当我为新行单击+时,它不会显示在窗体上
DataGridView
对数据库表中的默认值一无所知。因此,必须在DataGridView
中输入默认值
或者,如果正在使用数据绑定,则可以在数据表中使用默认值
当从数据库中添加一行时,默认值就存在了
这是对的,因为在数据库中它们是被设置的
通过表单添加新行,保留默认值为空、已保存、重新打开且没有默认值的字段
如果按以下方式将数据插入数据库:
insert into SomeTable ('Retired') values ('');
insert into SomeTable ('Last Mileage') values (0);
然后将不使用默认值。如果没有设置空值,我可以很有可能地假设此时您从DataGridView传递空值。这是错误的
如果按以下方式将数据插入数据库:
insert into SomeTable ('Retired') values ('');
insert into SomeTable ('Last Mileage') values (0);
然后,将使用Retired
列的默认值。应该如此
因此,您必须正确地设计Insert
语句,完全忽略那些应在数据库本身中用作默认值的列
总结。您必须在DataGridView
/DataTable
中填充默认值,或者动态构造Insert
语句,完全忽略未指定的值。您的意思是保存时数据库中没有设置默认值,还是在保存前表单应用程序中没有显示默认值?@SBFrancies在我单击+时表单上没有显示新行如果在未指定行的情况下插入,数据库中将显示默认值该列的值。如果您想在表单中自动设置它,我认为您必须在代码中手动设置。在表单上创建新行时,它不能自动拉入文本框吗?@Matt您可以通过编程方式添加它,但SQL Server中使用的默认值选项,如果此列中没有提供值,则指定一个值。我在一个类似的表单上收到一个错误,即当我单击“添加新”时,employeeID不能为空。它没有xxsource.EndEdit()代码>在it中,对employeeID的约束是什么?请记住执行此步骤在表单设计器上,单击BindingNavigator,在“属性”窗口中,将AddNewItem属性设置为(无)
这是我错过的步骤:)我将把它写下来!