无法使用DataGridView和DataTable插入Null值
本文关键字:DataTable 插入 Null DataGridView | 更新日期: 2023-09-27 18:16:04
我使用DataGridView控件与DataTable结合来编辑SQL表。我有两个字段的表是复选框绑定到名为acoustic
和hud
的bit not null
SQL列。当我添加新行并未选中hud
列时,我得到了下面的错误。我将acoustic
列设置为什么并不重要。如果我检查hud
列,但不检查acoustic
列,它工作得很好。
不能插入NULL值到列'hud',表'rawVinyl';列不允许为空。插入失败。
表的定义是:
CREATE TABLE rawVinyl
(
storesId nvarchar(12) NOT NULL,
baseColor nvarchar(50) NOT NULL,
shadeColor nvarchar(50) NULL,
rollWidth float NOT NULL,
shadeHeight float NULL,
acoustic bit NOT NULL,
hud bit NOT NULL
)
这是设计师为我遇到麻烦的复选框生成的代码。acoustic
列的代码与更改名称后的代码完全相同。
private System.Windows.Forms.DataGridViewCheckBoxColumn hud;
...
this.hud = new System.Windows.Forms.DataGridViewCheckBoxColumn();
...
this.hud.DataPropertyName = "hud";
this.hud.HeaderText = "H.U.D.";
this.hud.Name = "hud";
this.hud.Width = 46;
填充DataGridView的代码是
private const string selectQuery = "SELECT storesId, baseColor, shadeColor, rollWidth, shadeHeight, acoustic, hud FROM rawVinyl ORDER BY storesId";
...
DataTable tbl = new DataTable();
using( SqlDataAdapter data = new SqlDataAdapter(selectQuery, Global.ConnectionString) )
{
data.Fill(tbl);
bindingSource1.DataSource = tbl;
}
最后,保存更改的代码是:
DataTable tbl = bindingSource1.DataSource as DataTable;
DataTable changes = tbl.GetChanges();
if( changes != null )
{
using( SqlDataAdapter sda = new SqlDataAdapter(selectQuery,Global.ConnectionString) )
using( SqlCommandBuilder scb = new SqlCommandBuilder(sda) )
{
sda.UpdateBatchSize = 0; // do it all at once.
sda.Update(changes);
tbl.AcceptChanges();
}
}
我也试着为Checkbox列设置如下的默认值,但是没有一点区别:
this.hud.FalseValue = false;
this.hud.IndeterminateValue = false;
this.hud.TrueValue = true;
我不明白的主要事情是为什么我没有这个问题与acoustic
列?
可以设置dataccolumn。
acoustic
和hud
的默认值。tbl.Columns["acoustic"].DefaultValue = false;
tbl.Columns["hud"].DefaultValue = false;
也许在SQL服务器中你已经设置了acoustic
的默认值,所以错误只出现在hud
字段。