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

一.dataGridView刷新数据

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

代码如下:

public void ShowInfoQues()
{
//定义数据库连接语句:服务器=.(本地) 数据库名=a
string 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. SQL Server语句创建数据库和表——并设置主外键关系

    简单的创建数据库的 SQL 语句: use master go if exists(select * from sysdatabases where name='Test') begin select ...

  2. django rest framework 向数据库中插入数据时处理外键的方法

    一.models.py中 from django.db import models class UserModel(models.Model) user_name = models.CharField ...

  3. 数据库的SQL语句创建和主外键删除操作

    create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...

  4. 清除oracl中有主外键关联的表中的部分数据。

    1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ...

  5. MySQL创建数据表并建立主外键关系

    为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引, ...

  6. Sql Server有主外键关系时添加、删除数据

    当表之间有主外键关系时删除数据会被约束,添加.删除失败 解决办法,我们可以先把主外键关系的检查约束给关掉 → 然后删除数据 → 之后再把约束打开 查询出关掉所有外键约束的语句 SELECT 'ALTE ...

  7. 经典SQL语句大全_主外键_约束

    一.基础(建表.建约束.关系) 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整 ...

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

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

  9. EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载

    EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...

随机推荐

  1. 为什么在DllMain里不能调用LoadLibrary和FreeLibrary函数?

    为什么在DllMain里不能调用LoadLibrary和FreeLibrary函数? MSDN里对这个问题的答案十分的晦涩.不过现在我们已经有了足够的知识来解答这个问题.考虑下面的情况:       ...

  2. web开发(Java&Jquery)实现验证码

    1. Ajax Fancy Capcha 一个支持 Ajax 又很炫的 jQuery Captcha 插件,它使用了很人性化的验证机制. ​ from : http://www.webdesignbe ...

  3. 【csdn】文章很好 - system函数遇到的问题

    system函数遇到的问题http://blog.csdn.net/yangzhenzhen/article/details/51505176

  4. MS Sql 查询数据库连接数

    SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN (SELECT [DBID]FROM [Master].[dbo].[SYSDA ...

  5. 网络工程 POST与GET请求方法的本质区别

    POST与GET请求方法的本质区别: 第一:GET用于信息获取,它是安全的(这里安全的含义是指非修改信息),而POST是用于修改服务器上资源的请求 第二:GET请求的数据会附在URL之后,而POST把 ...

  6. git创建分支

    1.创建本地分支名称为dev的本地分支 git branch dev 2.将本地分支添加到远程分支 git push origin dev 3.查看创建的本地分支, 带有*符号的分支,代表当前所在分支 ...

  7. T-SQL事务

    事务 订火车票的时候,下一个订单,这个订单中,包含多个购买信息,要么全部执行,要么全部不执行,合作事务就是来处理这种模型的一种机制. --关键字:transaction 或 tran 简写形式 --开 ...

  8. (原)css 响应式媒体查询 模板

    @media only screen and (max-width:340px) { html,input{ font-size:80%; } } @media only screen and (ma ...

  9. asp.net文件下载

    protected void btn_Down(object sender, EventArgs e) { string filePath = Server.MapPath("/TradeL ...

  10. Mac下Mysql启动异常["ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)"]

    在mac下使用brew安装mysql,之前没有使用过,今天启动的时候发现启动不了 huijundeMacBook-Pro:bin huijunzhang$ mysql ERROR (HY000): C ...