日期:2014-05-18  浏览次数:20942 次

DataGridView 与数据库同步更新问题!(100分)
研究好一段时间!网上的方法也搜了许多!帮修改下下面的这个函数!
去掉try ...cath...会报一个错误如下:
对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。

C# code
 public static bool updateGridView(DataGridView dgv)
        {
            OleDbConnection con = GreatConn();
            OleDbDataAdapter oda = new OleDbDataAdapter("select * from employee",con );
            try
            {
                if (oda != null)
                {
                    DataTable dt = new DataTable();
                    oda.Fill(dt);
                    dgv.DataSource = dt;
                }
                if (oda != null)
                {
                    OleDbCommandBuilder cmdbuilder = new OleDbCommandBuilder(oda);
                    OleDbCommand cmd = cmdbuilder.GetUpdateCommand();
                    oda.UpdateCommand = cmd;
                    oda.Update((DataTable)dgv.DataSource);

                }
                return true;
            }
            catch
            {
                return false;
            }
        }





------解决方案--------------------
给employee表添加一列主键或设置一列unique列!
------解决方案--------------------
if (oda != null)
{
DataTable dt = new DataTable();
oda.Fill(dt);
dgv.DataSource = dt;
}
if (oda != null)
{
OleDbCommandBuilder cmdbuilder = new OleDbCommandBuilder(oda);
OleDbCommand cmd = cmdbuilder.GetUpdateCommand();
oda.UpdateCommand = cmd;
oda.Update((DataTable)dgv.DataSource);

}
两个条件判断怎么都是一样的?
------解决方案--------------------
楼主应把SQL语句的*去掉,把列名列出来,或者在更新命令中指定列名和参数,不然就会出错。

当然,一个表最好有主键,否则,将把所有的字段均作为更新的WHERE条件,此时,若有一个值是空值,很可能会引发
异常