本文主要讲诉在使用VS2012+SQL Server数据库做系统中,通常会遇到几个问题.使用dataGridView控件在修改、删除、插入数据后,怎样刷新数据显示操作后的结果.同时在对数据操作时通常会判断数据的主键是否存在或重复,判断外键是否重复,这几个问题我推荐使用函数的形式完成,同时推荐一个操作格式,下面将详细介绍.

一.dataGridView刷新数据

如下图所示,在数据库中删除一个数据或插入一个数据,我们都希望能够在左边的dataGridView控件中显示操作后的内容,而使用dataGridView1.Refresh()刷新只是刷新页面重绘控件,没有从数据库里读取内容.所以我们需要重新绑定数据,点击按钮故障信息删除后,实现重新读取数据库的值,并显示在控件dataGridView中即可.而这里我采用自定义函数实现重新绑定数据.

代码如下:

public void ShowInfoQues()
{//定义数据库连接语句:服务器=.(本地) 数据库名=astring consqlserver = "Data Source=.;Initial Catalog=a;Integrated Security=True;";string sql = "select * from Question";        //定义SQL查询语句 DataSet ds = new DataSet();                   //定义数据内存中缓存SqlConnection con;                            //定义SQL Server连接对象SqlDataAdapter da;                            //数据库命令和数据库连接con = new SqlConnection(consqlserver);        //定义SQL Server连接对象da = new SqlDataAdapter(sql, con);            //数据库命令和数据库连接con.Open();try{da.Fill(ds);                                    //填充数据dataGridView1.DataSource = ds.Tables[0];        //获取数据源赋值数据库控件}catch (Exception msg){MessageBox.Show(msg.Message);                   //异常处理}finally{con.Close();                    //关闭连接con.Dispose();                  //释放连接da.Dispose();                   //释放资源}
}

点击按钮"故障信息删除"后调用该函数ShowInfoQues()即可实现,通常填充数据中需要判断语句如下,如果插入到的结果存在时数据显示在dataGridView控件中,但这样会存在一个问题,当数据库中只存在一个数据时,删除该数据后表中为空就不会更新dataGridView,因为此时已经没有数据就不会执行dataGridView1.DataSource = ds.Tables[0].它会始终显示一行数据,除非在此载入该窗体,所以此时不需要下面判断:

if (ds.Tables[0].Rows.Count > 0)         //判断是否符合条件的数据记录
{dataGridView1.DataSource = ds.Tables[0];
}

在上面代码函数ShowInfoQues()中我设置为public,因为在点击“故障信息导入”按钮,它会进入另外一个界面,在那个界面填写完要插入的数据后同时更新父窗口dataGridView控件中的数据,实现插入数据更新,其中子窗口中的构造函数将带参数,如下图所示是子界面的代码:

//父窗体custServ 父窗体中含函数ShowInfoQues()
custServ cstemp = new custServ();
public custServInput(custServ cs)
{InitializeComponent();cstemp = cs;
}
//点击"确认添加"按钮实现满意度调查
private void button1_Click(object sender, EventArgs e)
{ ...                        //插入数据操作cstemp.ShowInfoQues();     //父窗口刷新this.Hide();               //隐藏窗体
}

父窗体中的代码如下:

//点击"故障信息录入"按钮
private void repInf_Click(object sender, EventArgs e)
{custServInput cSI = new custServInput(this);cSI.Show();
}

二.数据库主外键的判断

在对数据库进行操作时,通常会遇到判断主键是否存在或是否重复的问题,或判断外键是否存在的问题,因为如果外键不存在是不能插入数据的.在判断主键与外键时,我们可以定义一个函数,通过调用这个函数进行判断.

//该函数用于判断表中Phoneid(手机序列号)是否存在
private bool IsPhoneIdentify()
{string consqlserver = "Data Source=.;Initial Catalog=TeleMS;Integrated Security=True;";string sql = "select * from Question where phoneid='" + textBox2.Text.Trim() + "'";SqlConnection Conn = new SqlConnection(consqlserver);   //定义SQL Server连接对象  Conn.Open();SqlCommand Cmd = new SqlCommand(sql, Conn);SqlDataReader reader = Cmd.ExecuteReader();             //数据库命令和数据库连接if (reader.Read())                                      //存在{return true;}else{return false;}
}

上面代码是判断手机序列号是否存在,它通过判断数据库中phoneid=textBox2内容,如果存在返回true,如果不存在返回false并提示错误信息"该外键不存在,请验证插入!"提示:使用try{..}catch(Exception msg){MessageBox.Show(msg.Message);}finally{..}时C#会自动生成异常信息,但通过自定义函数总体感觉更好,至少让我们能更好的了解数据库原理及常见的操作错误.

三.推荐格式源代码

通过上面的叙述,可能你还不知道怎样使用这些函数在对数据库进行操作时进行一些简单的判断,下面通过需要插入如图数据,其中主外键表明:

我推荐的代码如下:

//点击"确认记录"按钮实现满意度调查
private void button1_Click(object sender, EventArgs e)
{if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == ""){MessageBox.Show("请输入顾客身份证号、售后人员编号和手机序列号!", "信息提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (IsCusIdentify() == false)   //顾客身份证号重复(主键){MessageBox.Show("该顾客身份证号已经存在,请验证输入!", "错误提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (IsPhoneIdentify() == false)  //手机序列号不存在(外键){MessageBox.Show("该手机序列号不存在,请验证输入!", "错误提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (IsUserIdentify() == false)   //售后人员编号不存在(外键){MessageBox.Show("该售后人员编号错误,请验证!", "错误提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (MessageBox.Show("确认要添加该进货订单信息?", "验证提示",System.Windows.Forms.MessageBoxButtons.YesNo,System.Windows.Forms.MessageBoxIcon.Question)==System.Windows.Forms.DialogResult.Yes){//实现插入数据操作string sqlInsert = string.Format(@"insert into ServiceInfo...");string consqlserver = "Data Source=.;Initial Catalog=a;Integrated Security=True;";SqlConnection cons = new SqlConnection(consqlserver);   //定义SQL Server连接对象  SqlCommand cmd = new SqlCommand(sqlInsert, cons);       //执行一个SQL语句try{cons.Open();                                        //打开连接cmd.ExecuteNonQuery();                              //返回执行SQL语句的行数MessageBox.Show("顾客手机使用满意情况调查数据记录成功!", "信息提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Information);csrmtemp.ShowInfoQues();                            //父窗口刷新this.Hide();                                        //隐藏窗体}catch (Exception msg){MessageBox.Show(msg.Message);                       //异常处理}finally{cons.Close();                                       //关闭连接cons.Dispose();                                     //释放连接cmd.Dispose();                                      //释放资源}}
}

四.总结

上面的排版可能有点乱,可能写得不是很好!但作者尽力了.原本想分成两篇写的,但因为上面叙述的几点是最近做项目同时遇到的一些知识,所以就同时写了.主要从dataGridView和主外键两个方面叙述,通过自己认为比较好的代码,传递给大家一些东西.希望大家能学到有用的知识,作者已尽力,如果有不足和不喜欢的地方,见谅!

(By:Eastmount 2013-9-8 夜11点http://blog.csdn.net/eastmount)

C# 数据库dataGridView刷新数据和主外键判断相关推荐

  1. mysql 删除表数据_主外键关联表的数据删除策略

    说个题外话,我从来没想过会被拼多多这款软件所魔怔,他的这种社交营销的能力,实在是太强了,在怂恿之下,开始给儿子拼个这个, 各位有空帮砍下,https://w.url.cn/s/AzlPAB9,或者扫下 ...

  2. 【2 - 数据库是如何存储数据的】Sql Server - 郝斌(字段、记录、表;图形化界面及sql语句建表;六种约束;一对一、一对多、多对多、数据库关系图;主外键)

    课程地址:数据库 SQLServer 视频教程全集(99P)| 22 小时从入门到精通_哔哩哔哩_bilibili 目录 数据库是如何解决数据存储问题的 1. 表的相关数据 2. create tab ...

  3. java获取表主外键_通过 jdbc 分析数据库中的表结构和主键外键

    文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hib ...

  4. mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞

    有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...

  5. MySQL主外键表关联表数据的同时删除

    今天遇到这样的问题,用mysql数据库,删除主表的数据时,删除不了报错.原来是主外键的关联关系. 遇到的错误和解决方法如下: 问题解决后,我又从网上找到了一篇讲解非常优秀的博文,转载至此,作者原文地址 ...

  6. 数据库中主外键概念详细介绍

    关于数据库的主外键设置问题 一.主外键概念 主键 ​ 1.主键 ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性称为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改.删除时使用 ...

  7. sql向数据库表中插入列,sql给表的列添加说明,sql添加主外键约束,增加列,增加字段

    规则代码 use 数据库名--向表中插入列alter table 表名 add 列名 类型go--给表的列添加说明 execute sp_addextendedproperty 'MS_Descrip ...

  8. SQLserver创建与主外键的看法

    一个.背景 最初研究的相关内容数据库.仅仅是正式.从来没有练过,只能慢慢漂流,现在做的客房时,,非常多的知识需要使用视图,慢的实践. 视图:我理解的就是一张表.它把我们所须要的某个表或某几个表中的部分 ...

  9. 使用Entity Framework和WCF Ria Services开发SilverLight之4:Map之主外键映射

    上一篇粗粗讲了一下如何使用EF4.1,针对POCO进行MAP,此篇在此基础上进行一下深入,具体讲一下如何进行映射.   1:主外键中的1对多映射 还是针对School数据库.查看如下两个表: 可以知道 ...

最新文章

  1. SpringBoot实践:更换启动Logo字样
  2. 中大型网站技术架构演变过程
  3. IDEA9+Tomcat热部署配置二法
  4. RabbitMQ实例教程:Windows下安装RabbitMQ
  5. c语言使单片机输出低电平,单片机开发中的一些实用技巧
  6. NOj 720项目安排
  7. 【Tools】MarkDown教程(八)-Typora使用完全手册
  8. 华为系统更新后通知栏变大了_苹果发布多款系统更新,包括面向老机型推送iOS 12.5...
  9. win10系统更新在哪_一键关闭win10系统更新,一款不错的小工具
  10. 架构设计系列(一)——架构设计概述
  11. java安全级别_java语言的线程安全级别--转
  12. android 技术点记录
  13. NetSuite高级打印模板设置
  14. html5小游戏塔防,HTML5塔防(一)
  15. 2018年,给自己加油!
  16. < CSDN周赛解析:第 27 期 >
  17. 小米一体化微水滴形态转轴,揭露小米MIX Fold 2的轻薄秘密
  18. 【JS中循环嵌套常见的六大经典例题+六大图形题,你知道哪几个?】
  19. vue-element-admin@4.2.1 dev: `vue-cli-service serve`
  20. OpenCV中的归一化

热门文章

  1. 一次处理ORA-06512的经验
  2. scip 练习2.18
  3. java抽象类实现接口可以不用实现方法
  4. sitecore系列教程之如何以编程方式将访客数据关联到联系人卡片
  5. 洛谷——P1342 请柬
  6. 关于线性条形码符号的解读(一)
  7. ARM中 __IO的作用解析
  8. python学习day11
  9. 超声射频信号的产生(RF Signal)
  10. [转]在Winform(C#)中使用Flash控件