关于修改DataGridView内的值更新到数据库 绝对高分

时间:2021-10-20 09:04:46


因为我想在DataGridView修改里面的值 单击 保存  就把DataGridView内的修改后的值更新到数据库  下面是自己的一些想法 但是没成功
//这里是一个实体类 nuit
baking.Model.UnitTable unit = new baking.Model.UnitTable() ;
//这里是业务逻辑类 
baking.BLL.UnitTable unitBll = new baking.BLL.UnitTable();
//循环
foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
{

//name 是我DataGridView 里面要修改的字段  remark 一样
unit.unit_name = row.Cells["name"].Value.ToString();
unit.flag = row.Cells["remark"].Value.ToString();
//这里的更新方法是早就写好的 我一会贴出来 
unitBll.Update(unit);

}

// 更新一条数据

public void Update(baking.Model.UnitTable model)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("update unit_table set ");
strSql.Append("unit_name=@unit_name,");
strSql.Append("flag=@flag,");

strSql.Append(" where unit_id=@unit_id ");
SqlParameter[] parameters = {
new SqlParameter("@unit_id", SqlDbType.VarChar,50),
new SqlParameter("@unit_name", SqlDbType.VarChar,50),
new SqlParameter("@flag", SqlDbType.VarChar,50),

parameters[0].Value = model.unit_id;
parameters[1].Value = model.unit_name;
parameters[2].Value = model.flag;


DbHelperSQL.ExecuteSql(strSql.ToString(),parameters);
}


请高手指点一 二。。 谢谢 

31 个解决方案

#1


我建议看北大青鸟于海涛的视频教程.

#2


该回复于2009-08-18 15:58:08被版主删除

#3


使用DataGridView更新数据库,建议配合DataAdapter一起使用
1.首先在页面上拖一个dataset,在里面tables集合里建立一个和数据库表结构相同的table
2.datagridview绑定上这个dataset及其里面table
3.在cs代码中

OdbcDataAdapter dap = new OdbcDataAdapter();
private void FormResult_Load(object sender, EventArgs e)
        {

            OdbcCommand cmd3 = new OdbcCommand("select * from project_using", DB.myConnection);
            dap.SelectCommand = cmd3;
            dataSet_project_using.Tables["project_using"].Clear();
            dap.Fill(dataSet_project_using.Tables["project_using"]);
        }
private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                OdbcCommandBuilder ocb = new OdbcCommandBuilder(dap);
                dap.Update(dataSet_project_using.Tables["project_using"]);
                dataSet_project_using.Tables["project_using"].AcceptChanges();

                MessageBoxEx.Show("发布成功");
            }
            catch (Exception ex)
            {
                MessageBoxEx.Show("发布失败" + ex.Message);
            }
        }

#4


上面的都对我没用 求一个人能讲解一下的

#5


顶上去 都写得这么详细了 请人帮看下

#6


strSql.Append("flag=@flag,"); 
后面这个逗号是不要的,
model.unit_id赋值没有
最好就是跟踪一下sql语句,放到数据库里面执行以下,看看会不会报错

#7


你的 baking.Model.UnitTable 是一个DataTable么?
如果是的话, 可以采用如下的方式:

        private SqlConnection thisConnection;
        private SqlDataAdapter thisAdapter;
        private SqlCommandBuilder thisBuilder;
        private void button1_Click(object sender, EventArgs e)
        {
            thisConnection = new SqlConnection(
           @"Data Source=HUI\SQLSERVER;Initial Catalog=Northwind;Integrated Security=True");    //数据源
            thisAdapter = new SqlDataAdapter(
                "SELECT CustomerID, CompanyName FROM Customers", thisConnection);               //指定数据表
            thisBuilder = new SqlCommandBuilder(thisAdapter);

            DataTable dt = new DataTable();
            thisAdapter.Fill(dt);

            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(dt.Rows[i]["CompanyName"]);                                   //输出值
                dt.Rows[i]["CompanyName"] = string.Format("{0}Acme, Inc.{1}", i,i);             //更改值
            }

            Update(dt);
        }

        private void Update(DataTable model)            //更新数据
        {
            thisAdapter.Update(model);                  //提交更新
            for (int i = 0; i < 5; i++)                 //输出更新后的值
            {
                Console.WriteLine(model.Rows[i]["CompanyName"]);
            }
            thisConnection.Close();
        }

#8


为什么不用DataAdapter?

#9


不想多麻烦就用ObjectDataSource

#10


strSql.Append("flag=@flag,"); 后面的“,”好不要
另外看看你的datagridview的columns是不是有名称
也就是row.Cells["name"].Value.ToString()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法

#11


好贴

#12


你现在报的什么错误?

#13


引用 10 楼 lsj_zrp 的回复:
strSql.Append("flag=@flag,"); 后面的“,”好不要
另外看看你的datagridview的columns是不是有名称
也就是row.Cells["name"].Value.ToString()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法


那里的strSql.Append("flag=@flag,"); 后面的“,”可以不用管 这里是正确的因为有很多我删除了 只留了有用的。。 请问有什么办法,,我测试了名字能用 请问还有什么办法 请讲了出, 来

#14


引用 12 楼 sandy945 的回复:
你现在报的什么错误?

没报错 什么都是对的 但就是不能把DGV里面的数据写入数据库
当点一下显示全问的时候 又还原了 

#15


使用 SqlCommandBuilder  不用写sql 实现 数据批处理

如何将填在datagridview单元格的内容存入数据库
http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html

#16


如果你是手动绑定:
在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。

然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。

#17


你更新之后 datagridview 重新绑定数据源了么?

#18


引用 17 楼 sandy945 的回复:
你更新之后 datagridview 重新绑定数据源了么?

如果修改起了数据库里面应该有东西吧 我能打开数据库查看 ,,主要问题就没保存进数据库

#19


你在更新的代码 地方加断点 调试一下

那个方法应该有个 int 类型的返回值 用于标示修改了几条数据的
你看看返回值 是多少

#20


或者你把 StringBuilder 生成的sql语句 放在数据库中执行一下

#21


和楼主一起学习!!

#22


怎么说呢?有现成的调试要会用,你把你调试得到的SQL拷贝出来,然后放在查询分析器或是pl/sql下面运行一下,看看更新成功没有就知道了,(或者更直观一点,打开你的SQL SERVER的事件探察器,找到捕获的SQL看看就知道了)
你说的程序没报错,我觉得最有可能的原因就是出在这句:
strSql.Append(" where unit_id=@unit_id "); 
也就是@unit_id这个ID在数据库里不存在,而你以为他已经存在,update语句没找到符合WHERE条件的记录是不会报错的,只是不更新罢了
所以建议调试下.
个人凭经验觉得90%是where的@unit_id不存在,或是那10%,update是事务的但没提交.但看你代码好象是动软生成的,应该不是事务的.还有就是保存好后重新绑定下datagridview

#23


该回复于2011-05-13 20:12:17被版主删除

#24


终于搞成功了 原来是这样的
private void btnSave_Click(object sender, EventArgs e)
        {
baking.Model.UnitTable unit =null ;
baking.BLL.UnitTable unitBll = null;

foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
{

unit = new baking.Model.UnitTable();
unitBll = new baking.BLL.UnitTable();
unit.unit_id = row.Cells["unit_id"].Value.ToString();
unit.unit_name = row.Cells["name"].Value.ToString();
unit.flag = row.Cells["remark"].Value.ToString();

unitBll.Update(unit);

}

原来是这样因为 updata里面的要求ID 号 把ID 号加上去就对了

#25


引用 24 楼 houkj0 的回复:
终于搞成功了 原来是这样的
 private void btnSave_Click(object sender, EventArgs e)
         {
 baking.Model.UnitTable unit =null ;
 baking.BLL.UnitTable unitBll = null;

 foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
 {

 unit = new baking.Model.UnitTable();
 unitBll = new baking.BLL.UnitTable();
 unit.unit_id = row.Cells["unit_id"].Value.ToString();
 unit.unit_name = row.Cells["name"].Value.ToString();
 unit.flag = row.Cells["remark"].Value.ToString();

 unitBll.Update(unit);

 }

 原来是这样因为 updata里面的要求ID 号 把ID 号加上去就对了


。。。

#26


引用 22 楼 xiao_jun_0820 的回复:
怎么说呢?有现成的调试要会用,你把你调试得到的SQL拷贝出来,然后放在查询分析器或是pl/sql下面运行一下,看看更新成功没有就知道了,(或者更直观一点,打开你的SQL SERVER的事件探察器,找到捕获的SQL看看就知道了)
你说的程序没报错,我觉得最有可能的原因就是出在这句:
strSql.Append(" where unit_id=@unit_id ");
也就是@unit_id这个ID在数据库里不存在,而你以为他已经存在,update语句没找到符合WHERE条件的记录是不会报错的,只是不更新罢了
所以建议调试下.
个人凭经验觉得90%是where的@unit_id不存在,或是那10%,update是事务的但没提交.但看你代码好象是动软生成的,应该不是事务的.还有就是保存好后重新绑定下datagridview


原来这位哥哥早就看出来了 我没注意  对不起呀 对不起呀

#27


恭喜你了...还想让你试试RowLeave

#28


Sandy945


xiao_jun_0820


感谢以上2位 。。。。 感谢 

#29


private void button1_Click(object sender, EventArgs e) //保存修改 

            SqlConnection conn = new SqlConnection(connString); 
            cmd = conn.CreateCommand(); 
            cmd.CommandText = "select * from Test_Table"; 
            SqlDataAdapter da = new SqlDataAdapter(cmd); 
            SqlCommandBuilder cb = new SqlCommandBuilder(da); 
            da.Update(ds); 
            dataGridView1.Update(); 

#30


http://download.csdn.net/down/794223/sjkjsandy

#31


求助

#1


我建议看北大青鸟于海涛的视频教程.

#2


该回复于2009-08-18 15:58:08被版主删除

#3


使用DataGridView更新数据库,建议配合DataAdapter一起使用
1.首先在页面上拖一个dataset,在里面tables集合里建立一个和数据库表结构相同的table
2.datagridview绑定上这个dataset及其里面table
3.在cs代码中

OdbcDataAdapter dap = new OdbcDataAdapter();
private void FormResult_Load(object sender, EventArgs e)
        {

            OdbcCommand cmd3 = new OdbcCommand("select * from project_using", DB.myConnection);
            dap.SelectCommand = cmd3;
            dataSet_project_using.Tables["project_using"].Clear();
            dap.Fill(dataSet_project_using.Tables["project_using"]);
        }
private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                OdbcCommandBuilder ocb = new OdbcCommandBuilder(dap);
                dap.Update(dataSet_project_using.Tables["project_using"]);
                dataSet_project_using.Tables["project_using"].AcceptChanges();

                MessageBoxEx.Show("发布成功");
            }
            catch (Exception ex)
            {
                MessageBoxEx.Show("发布失败" + ex.Message);
            }
        }

#4


上面的都对我没用 求一个人能讲解一下的

#5


顶上去 都写得这么详细了 请人帮看下

#6


strSql.Append("flag=@flag,"); 
后面这个逗号是不要的,
model.unit_id赋值没有
最好就是跟踪一下sql语句,放到数据库里面执行以下,看看会不会报错

#7


你的 baking.Model.UnitTable 是一个DataTable么?
如果是的话, 可以采用如下的方式:

        private SqlConnection thisConnection;
        private SqlDataAdapter thisAdapter;
        private SqlCommandBuilder thisBuilder;
        private void button1_Click(object sender, EventArgs e)
        {
            thisConnection = new SqlConnection(
           @"Data Source=HUI\SQLSERVER;Initial Catalog=Northwind;Integrated Security=True");    //数据源
            thisAdapter = new SqlDataAdapter(
                "SELECT CustomerID, CompanyName FROM Customers", thisConnection);               //指定数据表
            thisBuilder = new SqlCommandBuilder(thisAdapter);

            DataTable dt = new DataTable();
            thisAdapter.Fill(dt);

            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(dt.Rows[i]["CompanyName"]);                                   //输出值
                dt.Rows[i]["CompanyName"] = string.Format("{0}Acme, Inc.{1}", i,i);             //更改值
            }

            Update(dt);
        }

        private void Update(DataTable model)            //更新数据
        {
            thisAdapter.Update(model);                  //提交更新
            for (int i = 0; i < 5; i++)                 //输出更新后的值
            {
                Console.WriteLine(model.Rows[i]["CompanyName"]);
            }
            thisConnection.Close();
        }

#8


为什么不用DataAdapter?

#9


不想多麻烦就用ObjectDataSource

#10


strSql.Append("flag=@flag,"); 后面的“,”好不要
另外看看你的datagridview的columns是不是有名称
也就是row.Cells["name"].Value.ToString()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法

#11


好贴

#12


你现在报的什么错误?

#13


引用 10 楼 lsj_zrp 的回复:
strSql.Append("flag=@flag,"); 后面的“,”好不要
另外看看你的datagridview的columns是不是有名称
也就是row.Cells["name"].Value.ToString()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法


那里的strSql.Append("flag=@flag,"); 后面的“,”可以不用管 这里是正确的因为有很多我删除了 只留了有用的。。 请问有什么办法,,我测试了名字能用 请问还有什么办法 请讲了出, 来

#14


引用 12 楼 sandy945 的回复:
你现在报的什么错误?

没报错 什么都是对的 但就是不能把DGV里面的数据写入数据库
当点一下显示全问的时候 又还原了 

#15


使用 SqlCommandBuilder  不用写sql 实现 数据批处理

如何将填在datagridview单元格的内容存入数据库
http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html

#16


如果你是手动绑定:
在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。

然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。

#17


你更新之后 datagridview 重新绑定数据源了么?

#18


引用 17 楼 sandy945 的回复:
你更新之后 datagridview 重新绑定数据源了么?

如果修改起了数据库里面应该有东西吧 我能打开数据库查看 ,,主要问题就没保存进数据库

#19


你在更新的代码 地方加断点 调试一下

那个方法应该有个 int 类型的返回值 用于标示修改了几条数据的
你看看返回值 是多少

#20


或者你把 StringBuilder 生成的sql语句 放在数据库中执行一下

#21


和楼主一起学习!!

#22


怎么说呢?有现成的调试要会用,你把你调试得到的SQL拷贝出来,然后放在查询分析器或是pl/sql下面运行一下,看看更新成功没有就知道了,(或者更直观一点,打开你的SQL SERVER的事件探察器,找到捕获的SQL看看就知道了)
你说的程序没报错,我觉得最有可能的原因就是出在这句:
strSql.Append(" where unit_id=@unit_id "); 
也就是@unit_id这个ID在数据库里不存在,而你以为他已经存在,update语句没找到符合WHERE条件的记录是不会报错的,只是不更新罢了
所以建议调试下.
个人凭经验觉得90%是where的@unit_id不存在,或是那10%,update是事务的但没提交.但看你代码好象是动软生成的,应该不是事务的.还有就是保存好后重新绑定下datagridview

#23


该回复于2011-05-13 20:12:17被版主删除

#24


终于搞成功了 原来是这样的
private void btnSave_Click(object sender, EventArgs e)
        {
baking.Model.UnitTable unit =null ;
baking.BLL.UnitTable unitBll = null;

foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
{

unit = new baking.Model.UnitTable();
unitBll = new baking.BLL.UnitTable();
unit.unit_id = row.Cells["unit_id"].Value.ToString();
unit.unit_name = row.Cells["name"].Value.ToString();
unit.flag = row.Cells["remark"].Value.ToString();

unitBll.Update(unit);

}

原来是这样因为 updata里面的要求ID 号 把ID 号加上去就对了

#25


引用 24 楼 houkj0 的回复:
终于搞成功了 原来是这样的
 private void btnSave_Click(object sender, EventArgs e)
         {
 baking.Model.UnitTable unit =null ;
 baking.BLL.UnitTable unitBll = null;

 foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
 {

 unit = new baking.Model.UnitTable();
 unitBll = new baking.BLL.UnitTable();
 unit.unit_id = row.Cells["unit_id"].Value.ToString();
 unit.unit_name = row.Cells["name"].Value.ToString();
 unit.flag = row.Cells["remark"].Value.ToString();

 unitBll.Update(unit);

 }

 原来是这样因为 updata里面的要求ID 号 把ID 号加上去就对了


。。。

#26


引用 22 楼 xiao_jun_0820 的回复:
怎么说呢?有现成的调试要会用,你把你调试得到的SQL拷贝出来,然后放在查询分析器或是pl/sql下面运行一下,看看更新成功没有就知道了,(或者更直观一点,打开你的SQL SERVER的事件探察器,找到捕获的SQL看看就知道了)
你说的程序没报错,我觉得最有可能的原因就是出在这句:
strSql.Append(" where unit_id=@unit_id ");
也就是@unit_id这个ID在数据库里不存在,而你以为他已经存在,update语句没找到符合WHERE条件的记录是不会报错的,只是不更新罢了
所以建议调试下.
个人凭经验觉得90%是where的@unit_id不存在,或是那10%,update是事务的但没提交.但看你代码好象是动软生成的,应该不是事务的.还有就是保存好后重新绑定下datagridview


原来这位哥哥早就看出来了 我没注意  对不起呀 对不起呀

#27


恭喜你了...还想让你试试RowLeave

#28


Sandy945


xiao_jun_0820


感谢以上2位 。。。。 感谢 

#29


private void button1_Click(object sender, EventArgs e) //保存修改 

            SqlConnection conn = new SqlConnection(connString); 
            cmd = conn.CreateCommand(); 
            cmd.CommandText = "select * from Test_Table"; 
            SqlDataAdapter da = new SqlDataAdapter(cmd); 
            SqlCommandBuilder cb = new SqlCommandBuilder(da); 
            da.Update(ds); 
            dataGridView1.Update(); 

#30


http://download.csdn.net/down/794223/sjkjsandy

#31


求助