因为我想在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 里面要修改的字段  re 一样
unit.unit_name = row.Cells["name"].Value.ToString();
unit.flag = row.Cells["re"].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);
}
请高手指点一 二。。 谢谢 

解决方案 »

  1.   

    使用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);
                }
            }
      

  2.   

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

  3.   

    你的 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();
            }
      

  4.   

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

  5.   


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

  6.   

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

  7.   

    使用 SqlCommandBuilder  不用写sql 实现 数据批处理如何将填在datagridview单元格的内容存入数据库
    http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html
      

  8.   

    如果你是手动绑定:
    在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
    如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。
      

  9.   

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

  10.   

    你在更新的代码 地方加断点 调试一下那个方法应该有个 int 类型的返回值 用于标示修改了几条数据的
    你看看返回值 是多少
      

  11.   

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

  12.   

    怎么说呢?有现成的调试要会用,你把你调试得到的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
      

  13.   

    终于搞成功了 原来是这样的
    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["re"].Value.ToString();unitBll.Update(unit);}原来是这样因为 updata里面的要求ID 号 把ID 号加上去就对了
      

  14.   

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

  15.   

    Sandy945
    xiao_jun_0820
    感谢以上2位 。 感谢 
      

  16.   

    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(); 
      

  17.   

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