添加新记录时,Visual Studio SQL 默认值未显示在 Windows 窗体上
Posted
技术标签:
【中文标题】添加新记录时,Visual Studio SQL 默认值未显示在 Windows 窗体上【英文标题】:Visual studio SQL default value not showing on windows form when adding new record 【发布时间】:2018-06-16 07:56:17 【问题描述】:我在 Visual Studio 中创建了一个 SQL 表,并为字段设置了默认值。
该表已连接到我的 C# 项目(在同一解决方案中)并且可以正常运行,但是通过 Windows 窗体创建新行时不会出现默认值。
来自评论问题的信息:
当我单击新行的 + 时,它不会出现在表单上。 当从数据库中添加一行时,默认值就在那里。 通过表单添加了一个新行,将默认值的字段留空,保存,重新打开并且没有默认值。【问题讨论】:
您的意思是保存时没有在数据库中设置默认值,还是保存前没有出现在表单应用程序中? @SBFrancies 当我单击新行的 + 时,它不会出现在表单上 如果您在没有为该列指定值的情况下进行插入,则默认值将出现在数据库中。如果您想以我认为您必须在代码中手动设置的形式自动设置它。 在表单上新建一行时不能自动拉到文本框中吗? @Matt 您可以通过编程方式添加它,但 SQL Server 中使用的默认值选项是在此列中没有提供值时分配一个值 【参考方案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 或为空的情况下设置默认值,请尝试使用触发器
【讨论】:
以上是关于添加新记录时,Visual Studio SQL 默认值未显示在 Windows 窗体上的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Visual Studio 2010 在 C++ 中向我的项目添加大型 SQL 文件?
将数据从 c#form (visual studio) 添加到 mysql 数据库,并且需要重新检索新的记录 ID 以形成
C# Visual Studio - 将 SQL 表数据输出到 Datagridview