因为我想在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
#3
使用DataGridView更新数据库,建议配合DataAdapter一起使用
1.首先在页面上拖一个dataset,在里面tables集合里建立一个和数据库表结构相同的table
2.datagridview绑定上这个dataset及其里面table
3.在cs代码中
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语句,放到数据库里面执行以下,看看会不会报错
后面这个逗号是不要的,
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();
}
如果是的话, 可以采用如下的方式:
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()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法
另外看看你的datagridview的columns是不是有名称
也就是row.Cells["name"].Value.ToString()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法
#11
好贴
#12
你现在报的什么错误?
#13
那里的strSql.Append("flag=@flag,"); 后面的“,”可以不用管 这里是正确的因为有很多我删除了 只留了有用的。。 请问有什么办法,,我测试了名字能用 请问还有什么办法 请讲了出, 来
#14
没报错 什么都是对的 但就是不能把DGV里面的数据写入数据库
当点一下显示全问的时候 又还原了
#15
使用 SqlCommandBuilder 不用写sql 实现 数据批处理
如何将填在datagridview单元格的内容存入数据库
http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html
如何将填在datagridview单元格的内容存入数据库
http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html
#16
如果你是手动绑定:
在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。
然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。
在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。
然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。
#17
你更新之后 datagridview 重新绑定数据源了么?
#18
如果修改起了数据库里面应该有东西吧 我能打开数据库查看 ,,主要问题就没保存进数据库
#19
你在更新的代码 地方加断点 调试一下
那个方法应该有个 int 类型的返回值 用于标示修改了几条数据的
你看看返回值 是多少
那个方法应该有个 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
你说的程序没报错,我觉得最有可能的原因就是出在这句:
strSql.Append(" where unit_id=@unit_id ");
也就是@unit_id这个ID在数据库里不存在,而你以为他已经存在,update语句没找到符合WHERE条件的记录是不会报错的,只是不更新罢了
所以建议调试下.
个人凭经验觉得90%是where的@unit_id不存在,或是那10%,update是事务的但没提交.但看你代码好象是动软生成的,应该不是事务的.还有就是保存好后重新绑定下datagridview
#23
#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 号加上去就对了
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
。。。
#26
原来这位哥哥早就看出来了 我没注意 对不起呀 对不起呀
#27
恭喜你了...还想让你试试RowLeave
#28
Sandy945
xiao_jun_0820
感谢以上2位 。。。。 感谢
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();
}
{
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
#3
使用DataGridView更新数据库,建议配合DataAdapter一起使用
1.首先在页面上拖一个dataset,在里面tables集合里建立一个和数据库表结构相同的table
2.datagridview绑定上这个dataset及其里面table
3.在cs代码中
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语句,放到数据库里面执行以下,看看会不会报错
后面这个逗号是不要的,
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();
}
如果是的话, 可以采用如下的方式:
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()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法
另外看看你的datagridview的columns是不是有名称
也就是row.Cells["name"].Value.ToString()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法
#11
好贴
#12
你现在报的什么错误?
#13
那里的strSql.Append("flag=@flag,"); 后面的“,”可以不用管 这里是正确的因为有很多我删除了 只留了有用的。。 请问有什么办法,,我测试了名字能用 请问还有什么办法 请讲了出, 来
#14
没报错 什么都是对的 但就是不能把DGV里面的数据写入数据库
当点一下显示全问的时候 又还原了
#15
使用 SqlCommandBuilder 不用写sql 实现 数据批处理
如何将填在datagridview单元格的内容存入数据库
http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html
如何将填在datagridview单元格的内容存入数据库
http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html
#16
如果你是手动绑定:
在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。
然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。
在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。
然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。
#17
你更新之后 datagridview 重新绑定数据源了么?
#18
如果修改起了数据库里面应该有东西吧 我能打开数据库查看 ,,主要问题就没保存进数据库
#19
你在更新的代码 地方加断点 调试一下
那个方法应该有个 int 类型的返回值 用于标示修改了几条数据的
你看看返回值 是多少
那个方法应该有个 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
你说的程序没报错,我觉得最有可能的原因就是出在这句:
strSql.Append(" where unit_id=@unit_id ");
也就是@unit_id这个ID在数据库里不存在,而你以为他已经存在,update语句没找到符合WHERE条件的记录是不会报错的,只是不更新罢了
所以建议调试下.
个人凭经验觉得90%是where的@unit_id不存在,或是那10%,update是事务的但没提交.但看你代码好象是动软生成的,应该不是事务的.还有就是保存好后重新绑定下datagridview
#23
#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 号加上去就对了
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
。。。
#26
原来这位哥哥早就看出来了 我没注意 对不起呀 对不起呀
#27
恭喜你了...还想让你试试RowLeave
#28
Sandy945
xiao_jun_0820
感谢以上2位 。。。。 感谢
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();
}
{
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
求助