• C# 数据库dataGridView刷新数据和主外键判断


    本文主要讲诉在使用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++ Primer 第五版-1.1
    C++ Primer 第五版笔记-1.0
    TouchID
    正则表达式
    duplicate symbol 错误
    第三方登录
    AFNetWorking
    IOS---通知
    左右点击--日期增减
    Xcode相关设置
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3310864.html
Copyright © 2020-2023  润新知