急急!!!OleDbCommandBuilder更新问题!!!

时间:2022-05-26 16:15:31
我在窗体中用datagridview来显示数据库中的数据,现在我用OleDbCommandBuilder来自动生成SQL命令,用OleDbDataAdapter.Update进行更新,现在可以实现对数据表的更新和添加,但是问题是有一个字段AA不在datagridview中显示出来但又要添加他的值到数据库中,可是自动生成的SelectCommand中没有AA这个字段,因此添加后不显示的那个字段总是默认为0,其他字段都能正常添加。我想在更新的同时赋予那个字段一个值,请问该怎么做呢?

17 个解决方案

#1


OleDbCommandBuilder的SelectCommand是需要自己指定的
自动生成的是UpdateCommand~
你把你的部分绑定代码贴出来看看

#2


在datagridview中不显示equip_id ,但要通过他的值来判断,具体如下:

//这是在datagridview中显示数据的代码:
str1 = @"select time AS 时间,kind AS 总类,cause AS 原因,underwrite AS 签名 from siren_history where equip_id =" + id + "";
OleDbDataAdapter da1 = new OleDbDataAdapter(str1, Olecon);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
this.dataGridViewHisRecord.DataSource = dt1;


这是点击按钮更新数据的代码:

private DataTable DT1 = new DataTable();
private OleDbDataAdapter DA1 = new OleDbDataAdapter();
OleDbCommand dc1 = new OleDbCommand(str1, olecon);
DA1.SelectCommand = dc1;
DA1.Fill(DT1);
dataGridViewHisRecord.DataSource = DT1;

private void bt_dgv1_Click(object sender, EventArgs e)
        {
            try
            {
                OleDbCommandBuilder dcb = new OleDbCommandBuilder(DA1);
                dcb.QuotePrefix = "[";
                dcb.QuoteSuffix = "]";
                DA1.Update(DT1);
                MessageBox.Show("更新成功!");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return;
            }    
        }

#3


不明白!

#4


搞不清楚你什么意思

#5


假设我现在数据表中有3个字段:a,b,c,d。现在要在datagridview中只显示a,b,c的数据。我想通过点击按钮来更新和添加数据,使用的是:OleDbDataAdapter.Update(datatable)。功能是可以实现,但是添加的数据是a,b,c的值,而此时d字段的默认值为0,我希望是在添加完数据时,给d赋予一个固定值。我想问如何给d赋值,语句该怎么写?

#6


我要在datagridview中直接添加a,b,c的值进行保存,顺便来增加d的值,就是这个意思

#7


怎么每人回答了呢,帮帮我这个菜鸟吧,很召集啊

#8


如果equip_id是主键
SQL语句应该把equip_id读到dataTable里
你再把equip_id那一列在datagridview里visable = false;就行~
CommandBuilder自动生成更新语句的前提是必须要有主键

#9


equip_id不是主键
如果把equip_id那一列在datagridview里visable = false,在datagridview中直接添加一行数据时equip_id这个字段的值就不能直接添加了,就默认为空了。可在datagridview中显示数据时的SQL语句还要用“where equip_id=aa ”,那么这条刚添加的数据就无法显示了,因为为空啊。能不能在用OleDbDataAdapter.Update(datatable)为其他字段添加值的时候把equip_id这个字段的值,定为一个值呢?

#10


不是太清楚你的数据关系

可以考虑把id字段设为自增字段 这样向数据库添加记录时就不用管这个字段的值了 数据库会自动处理


#11


这么说吧:在窗体1中有两个按钮A,B,窗体B中有个datagridview,点击A或者B时弹出窗体B,B中的datagridview用来显示和添加设备A和B的属性,A和B属于同种设备,使用同一个属性表,用字段equip_id来区分。现在要通过datagridview来显示和修改除equip_id外的其他字段。在显示属性信息时是要用到equip_id来判断是A的还是B的,而datagridview中又没有这个字段,添加记录时没法给equip_id赋值,而CommandBuilder又是自动生成更新语句,矛盾就在这里。不知道你们明白了没有。

#12


LZ这种情况,equip_id看来一定要让用户去指定了~

#13


是啊我感觉也是这样,可领导说,用户还要输入这个很麻烦,还有其他方法吗,我该怎么实现呢,这一种方法,很方便,可就这?????????????????????????????????

#14


如果程序能判断的话你就用程序判断吧~
在equip_id那一列自动显示出来,这样就不用用户去输了~
领导是不是都很恐怖呀?呵呵~

#15


能提示一下吗,本人是菜鸟啊,谢谢。

#16


就按我上面的程序加点东西,能不能实现在插入其他数据的时候对equip_id这个字段直接赋值。

#17


谢谢大家,我已经解决了,结贴。

#1


OleDbCommandBuilder的SelectCommand是需要自己指定的
自动生成的是UpdateCommand~
你把你的部分绑定代码贴出来看看

#2


在datagridview中不显示equip_id ,但要通过他的值来判断,具体如下:

//这是在datagridview中显示数据的代码:
str1 = @"select time AS 时间,kind AS 总类,cause AS 原因,underwrite AS 签名 from siren_history where equip_id =" + id + "";
OleDbDataAdapter da1 = new OleDbDataAdapter(str1, Olecon);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
this.dataGridViewHisRecord.DataSource = dt1;


这是点击按钮更新数据的代码:

private DataTable DT1 = new DataTable();
private OleDbDataAdapter DA1 = new OleDbDataAdapter();
OleDbCommand dc1 = new OleDbCommand(str1, olecon);
DA1.SelectCommand = dc1;
DA1.Fill(DT1);
dataGridViewHisRecord.DataSource = DT1;

private void bt_dgv1_Click(object sender, EventArgs e)
        {
            try
            {
                OleDbCommandBuilder dcb = new OleDbCommandBuilder(DA1);
                dcb.QuotePrefix = "[";
                dcb.QuoteSuffix = "]";
                DA1.Update(DT1);
                MessageBox.Show("更新成功!");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return;
            }    
        }

#3


不明白!

#4


搞不清楚你什么意思

#5


假设我现在数据表中有3个字段:a,b,c,d。现在要在datagridview中只显示a,b,c的数据。我想通过点击按钮来更新和添加数据,使用的是:OleDbDataAdapter.Update(datatable)。功能是可以实现,但是添加的数据是a,b,c的值,而此时d字段的默认值为0,我希望是在添加完数据时,给d赋予一个固定值。我想问如何给d赋值,语句该怎么写?

#6


我要在datagridview中直接添加a,b,c的值进行保存,顺便来增加d的值,就是这个意思

#7


怎么每人回答了呢,帮帮我这个菜鸟吧,很召集啊

#8


如果equip_id是主键
SQL语句应该把equip_id读到dataTable里
你再把equip_id那一列在datagridview里visable = false;就行~
CommandBuilder自动生成更新语句的前提是必须要有主键

#9


equip_id不是主键
如果把equip_id那一列在datagridview里visable = false,在datagridview中直接添加一行数据时equip_id这个字段的值就不能直接添加了,就默认为空了。可在datagridview中显示数据时的SQL语句还要用“where equip_id=aa ”,那么这条刚添加的数据就无法显示了,因为为空啊。能不能在用OleDbDataAdapter.Update(datatable)为其他字段添加值的时候把equip_id这个字段的值,定为一个值呢?

#10


不是太清楚你的数据关系

可以考虑把id字段设为自增字段 这样向数据库添加记录时就不用管这个字段的值了 数据库会自动处理


#11


这么说吧:在窗体1中有两个按钮A,B,窗体B中有个datagridview,点击A或者B时弹出窗体B,B中的datagridview用来显示和添加设备A和B的属性,A和B属于同种设备,使用同一个属性表,用字段equip_id来区分。现在要通过datagridview来显示和修改除equip_id外的其他字段。在显示属性信息时是要用到equip_id来判断是A的还是B的,而datagridview中又没有这个字段,添加记录时没法给equip_id赋值,而CommandBuilder又是自动生成更新语句,矛盾就在这里。不知道你们明白了没有。

#12


LZ这种情况,equip_id看来一定要让用户去指定了~

#13


是啊我感觉也是这样,可领导说,用户还要输入这个很麻烦,还有其他方法吗,我该怎么实现呢,这一种方法,很方便,可就这?????????????????????????????????

#14


如果程序能判断的话你就用程序判断吧~
在equip_id那一列自动显示出来,这样就不用用户去输了~
领导是不是都很恐怖呀?呵呵~

#15


能提示一下吗,本人是菜鸟啊,谢谢。

#16


就按我上面的程序加点东西,能不能实现在插入其他数据的时候对equip_id这个字段直接赋值。

#17


谢谢大家,我已经解决了,结贴。