C#通过Datagridview来删除肯更新SQL数据库

eric_feng666 2017-02-07 02:00:29
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Update_SQL
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private SqlConnection con = null;
private DataSet ds = new DataSet();
private SqlDataAdapter myda = null;
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "server=localhost;database=AlumManager;user=sa;pwd=sql";
string selectSQL = "select * from test ";
SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);
myda.Fill(ds,"test");
this.dataGridView1.DataSource = ds.Tables["test"];
}

private void Update_btn_Click(object sender, EventArgs e)
{
SqlCommandBuilder SCB = new SqlCommandBuilder(myda);
myda.Update(ds, "test");
}

private void Del_btn_Click(object sender, EventArgs e)
{
dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex);
SqlCommandBuilder SCB = new SqlCommandBuilder(myda);
myda.Update(ds, "test");

}
}
}
...全文
483 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
eric_feng666 2017-02-10
  • 打赏
  • 举报
回复
引用 19 楼 cpycpy000 的回复:
中午在睡觉,刚才在上课....... private SqlDataAdapter myda = null; //定义一个SqlDataAdapter对象,名字叫myda,值为null myda = new SqlDataAdapter(selectSQL, con); //实例化一个SqlDataAdapter对象,将这个对象与myda变量关联起来 这不是重复,而是本来全局变量的设计就是如此: 在你的代码中,因为你需要使用selectSQL和con对象才能完成myda变量的赋值操作,所以你必须分开写。 不然写成一句就可以了。 另外,新的这段代码,你又是犯了最开始的错误,在button1的click事件中你又重新定义了一个跟myda重名的局部变量。 全局变量是提前定义一次,要用的时候可以无数次赋值。 而局部变量是要用的时候才定义,立刻赋值,当函数体结束时就会被销毁。 当局部变量与全局变量重名时,优先使用局部变量。 另外,我也没有什么东西可以教你的_(:3ゝ∠)_我自己也只是一个业余的爱好者罢了。 你要学会查阅资料,自己去理解。理解不能的再来询问就是了...(我自己就是这样)
谢谢哥们,受益匪浅。
eric_feng666 2017-02-08
  • 打赏
  • 举报
回复
引用 15 楼 cpycpy000 的回复:
另外,程序运行的时候,是无法对一个 值为null的变量进行操作的。 这一点就是你最初时程序运行失败的原因之一(另一个就是没分清全局与局部变量) 因为你在Load函数中只对局部变量的myda进行赋值操作,那么全局变量的myda就始终还是null 所以你的后面两个函数才会出错,因为全局变量的myda是一个null,不是一个可以使用的变量。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace sql { public partial class data : Form { public data() { InitializeComponent(); } private SqlDataAdapter myda; private void button1_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); con.ConnectionString = "server=localhost;database=AlumManager;user=sa;pwd=sql"; con.Open(); string selectSQL = "select * from test "; SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con); DataSet myds = new DataSet(); myda.Fill(myds, "test"); dataGridView1.DataSource = myds.Tables["test"]; // dataGridView1.Columns[0].HeaderText = "姓名"; // dataGridView1.Columns[1].HeaderText = "公司"; //dataGridView1.Columns[2].HeaderText = "部门"; label2.Text = (dataGridView1.Rows.Count-1).ToString(); con.Close(); } private void Update_btn_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); con.ConnectionString = "server=localhost;database=AlumManager;user=sa;pwd=sql"; con.Open(); string selectSQL = "select * from test "; myda = new SqlDataAdapter(selectSQL, con); DataSet myds = new DataSet(); // myda.Fill(myds, "test"); dataGridView1.DataSource = myds.Tables["test"]; SqlCommandBuilder SCB = new SqlCommandBuilder(myda); // myda.InsertCommand = SCB.GetInsertCommand(); myda.Update(myds,"test"); con.Close(); } 你看看我这些语句对吗?
eric_feng666 2017-02-08
  • 打赏
  • 举报
回复
引用 15 楼 cpycpy000 的回复:
另外,程序运行的时候,是无法对一个 值为null的变量进行操作的。 这一点就是你最初时程序运行失败的原因之一(另一个就是没分清全局与局部变量) 因为你在Load函数中只对局部变量的myda进行赋值操作,那么全局变量的myda就始终还是null 所以你的后面两个函数才会出错,因为全局变量的myda是一个null,不是一个可以使用的变量。
private SqlDataAdapter myda = null; myda = new SqlDataAdapter(selectSQL, con); 这两个语句有啥区别? 第一个语句已经定义了MYDA 第二个为啥还要NEW?难道就是为了实例化 不明白为啥要重复。
cpycpy000 2017-02-08
  • 打赏
  • 举报
回复
另外,程序运行的时候,是无法对一个 值为null的变量进行操作的。 这一点就是你最初时程序运行失败的原因之一(另一个就是没分清全局与局部变量) 因为你在Load函数中只对局部变量的myda进行赋值操作,那么全局变量的myda就始终还是null 所以你的后面两个函数才会出错,因为全局变量的myda是一个null,不是一个可以使用的变量。
cpycpy000 2017-02-08
  • 打赏
  • 举报
回复
引用 13 楼 eric_feng666 的回复:
[quote=引用 12 楼 cpycpy000 的回复:] [quote=引用 11 楼 eric_feng666 的回复:] [quote=引用 10 楼 mlqxj35674 的回复:] SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);//这样写表示这是一举个局部变量 ,后面引用的myda依然是空 myda = new SqlDataAdapter(selectSQL, con);//这样写表示对类成员进行了实例化,后面引用的myda不会是空
谢谢,按照你的方法,问题是解决了,其实具体的原因还是 没弄明白。您的QQ是多少啊,以后会长请教。方便告诉吗?[/quote] 首先, 你要清楚全局变量和局部变量的区别 其次, 你要仔细看清楚,你是否已经定义了一个叫做myda的全局变量 最后, 函数体中进行赋值操作时,局部变量的优先度大于全局变量[/quote] namespace Update_SQL { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private DataSet ds = new DataSet(); private SqlDataAdapter myda = null; private void Form1_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); con.ConnectionString = "server=localhost;database=AlumManager;user=sa;pwd=sql"; string selectSQL = "select * from test "; myda = new SqlDataAdapter(selectSQL, con); myda.Fill(ds,"test"); this.dataGridView1.DataSource = ds.Tables["test"]; } private void Update_btn_Click(object sender, EventArgs e) { SqlCommandBuilder SCB = new SqlCommandBuilder(myda); //SCB.GetUpdateCommand(); myda.Update(ds, "test"); } private void Del_btn_Click(object sender, EventArgs e) { dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex); SqlCommandBuilder SCB = new SqlCommandBuilder(myda); //SCB.GetUpdateCommand(); myda.Update(ds, "test"); } } } 是不是 这两个红色MYDA是一个全局变量,绿色是单独的另一个局部变量,两个没有数据联系[/quote] 不是的,首先, 全局变量就意味着,当前类中的所有函数都能使用这个变量。 局部变量则意味着,只有当前函数中能使用这个变量,函数结束时,变量会被销毁。 其次, 局部变量指的是,在函数体中新定义的变量。 也就是你刚发帖子时的写法:SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con); 你在Load函数中重新定义了一个叫做myda的SqlDataAdapter变量,而这个局部变量因为与全局变量myda重名,所以优先使用。 这就是我上面说的,在函数体中,局部变量的优先度高于全局变量。 而你新改了这段代码中,因为在Load函数中没有定义一个新的myda变量,而是只对myda变量进行赋值,那么自然会调用到全局变量,这样子,你的其余函数才能使用myda这个全局变量。 所以,你这段新代码中,红色和绿色的myda都指的是全局变量。
eric_feng666 2017-02-08
  • 打赏
  • 举报
回复
引用 12 楼 cpycpy000 的回复:
[quote=引用 11 楼 eric_feng666 的回复:] [quote=引用 10 楼 mlqxj35674 的回复:] SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);//这样写表示这是一举个局部变量 ,后面引用的myda依然是空 myda = new SqlDataAdapter(selectSQL, con);//这样写表示对类成员进行了实例化,后面引用的myda不会是空
谢谢,按照你的方法,问题是解决了,其实具体的原因还是 没弄明白。您的QQ是多少啊,以后会长请教。方便告诉吗?[/quote] 首先, 你要清楚全局变量和局部变量的区别 其次, 你要仔细看清楚,你是否已经定义了一个叫做myda的全局变量 最后, 函数体中进行赋值操作时,局部变量的优先度大于全局变量[/quote] namespace Update_SQL { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private DataSet ds = new DataSet(); private SqlDataAdapter myda = null; private void Form1_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); con.ConnectionString = "server=localhost;database=AlumManager;user=sa;pwd=sql"; string selectSQL = "select * from test "; myda = new SqlDataAdapter(selectSQL, con); myda.Fill(ds,"test"); this.dataGridView1.DataSource = ds.Tables["test"]; } private void Update_btn_Click(object sender, EventArgs e) { SqlCommandBuilder SCB = new SqlCommandBuilder(myda); //SCB.GetUpdateCommand(); myda.Update(ds, "test"); } private void Del_btn_Click(object sender, EventArgs e) { dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex); SqlCommandBuilder SCB = new SqlCommandBuilder(myda); //SCB.GetUpdateCommand(); myda.Update(ds, "test"); } } } 是不是 这两个红色MYDA是一个全局变量,绿色是单独的另一个局部变量,两个没有数据联系
cpycpy000 2017-02-08
  • 打赏
  • 举报
回复
引用 11 楼 eric_feng666 的回复:
[quote=引用 10 楼 mlqxj35674 的回复:] SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);//这样写表示这是一举个局部变量 ,后面引用的myda依然是空 myda = new SqlDataAdapter(selectSQL, con);//这样写表示对类成员进行了实例化,后面引用的myda不会是空
谢谢,按照你的方法,问题是解决了,其实具体的原因还是 没弄明白。您的QQ是多少啊,以后会长请教。方便告诉吗?[/quote] 首先, 你要清楚全局变量和局部变量的区别 其次, 你要仔细看清楚,你是否已经定义了一个叫做myda的全局变量 最后, 函数体中进行赋值操作时,局部变量的优先度大于全局变量
eric_feng666 2017-02-08
  • 打赏
  • 举报
回复
引用 10 楼 mlqxj35674 的回复:
SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);//这样写表示这是一举个局部变量 ,后面引用的myda依然是空 myda = new SqlDataAdapter(selectSQL, con);//这样写表示对类成员进行了实例化,后面引用的myda不会是空
谢谢,按照你的方法,问题是解决了,其实具体的原因还是 没弄明白。您的QQ是多少啊,以后会长请教。方便告诉吗?
程序猿老曾 2017-02-08
  • 打赏
  • 举报
回复
SqlConnection不需要Open吗??
cpycpy000 2017-02-08
  • 打赏
  • 举报
回复
中午在睡觉,刚才在上课....... private SqlDataAdapter myda = null; //定义一个SqlDataAdapter对象,名字叫myda,值为null myda = new SqlDataAdapter(selectSQL, con); //实例化一个SqlDataAdapter对象,将这个对象与myda变量关联起来 这不是重复,而是本来全局变量的设计就是如此: 在你的代码中,因为你需要使用selectSQL和con对象才能完成myda变量的赋值操作,所以你必须分开写。 不然写成一句就可以了。 另外,新的这段代码,你又是犯了最开始的错误,在button1的click事件中你又重新定义了一个跟myda重名的局部变量。 全局变量是提前定义一次,要用的时候可以无数次赋值。 而局部变量是要用的时候才定义,立刻赋值,当函数体结束时就会被销毁。 当局部变量与全局变量重名时,优先使用局部变量。 另外,我也没有什么东西可以教你的_(:3ゝ∠)_我自己也只是一个业余的爱好者罢了。 你要学会查阅资料,自己去理解。理解不能的再来询问就是了...(我自己就是这样)
eric_feng666 2017-02-08
  • 打赏
  • 举报
回复
不理我了?
mlqxj35674 2017-02-07
  • 打赏
  • 举报
回复
SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);//这样写表示这是一举个局部变量 ,后面引用的myda依然是空 myda = new SqlDataAdapter(selectSQL, con);//这样写表示对类成员进行了实例化,后面引用的myda不会是空
eric_feng666 2017-02-07
  • 打赏
  • 举报
回复
引用 8 楼 mlqxj35674 的回复:
SqlConnection con = new SqlConnection(); con.ConnectionString = "server=localhost;database=AlumManager;user=sa;pwd=sql"; string selectSQL = "select * from test "; SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);// 改为 myda = new SqlDataAdapter(selectSQL, con); myda.Fill(ds,"test"); this.dataGridView1.DataSource = ds.Tables["test"];
有啥区别啊?
mlqxj35674 2017-02-07
  • 打赏
  • 举报
回复
SqlConnection con = new SqlConnection(); con.ConnectionString = "server=localhost;database=AlumManager;user=sa;pwd=sql"; string selectSQL = "select * from test "; SqlDataAdapter myda = new SqlDataAdapter(selectSQL, con);// 改为 myda = new SqlDataAdapter(selectSQL, con); myda.Fill(ds,"test"); this.dataGridView1.DataSource = ds.Tables["test"];
eric_feng666 2017-02-07
  • 打赏
  • 举报
回复
不知道为啥就是不行
eric_feng666 2017-02-07
  • 打赏
  • 举报
回复
[

mlqxj35674 2017-02-07
  • 打赏
  • 举报
回复
你连接的的是SQL SERVER,修改完数据库,重启下服务器试试
eric_feng666 2017-02-07
  • 打赏
  • 举报
回复
设置了主键,但是还是不行,另外为啥上传不了图片工,很奇怪,一直处于上传中
mlqxj35674 2017-02-07
  • 打赏
  • 举报
回复
test表必须有主键,否则 SqlCommandBuilder不会生成删除,插入命令,另外错误是 1 SqlCommandBuilder 应该在SqlDataAdapter 实例化后就创建,只需一次,不能是在按钮每单击一次创建一个,不合理 2 按钮单击中代码大概应该是这个样子 builder.GetUpdateCommand() adapter.Update(dataSet, tableName)
eric_feng666 2017-02-07
  • 打赏
  • 举报
回复
更新不了,衣删除不了,求各位大师帮助,
加载更多回复(1)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧