前端界面操作数据表(知识点描述,思维导图,示例代码,效果截图)

前端界面操作数据表,主要是是指对SQL数据表进行增删改查操作。

操作平台:C#2008+SQL

一、思维导图:

二、知识点介绍

1.利用前端界面对数据库进行操作,最关键的一点就是实现前端界面与数据库的连接。

数据库的连接可以通过设置,也可以直接用代码连接。我们建议用代码连接。代码连接的话,是指连接字符串。如下为连接字符串的示例代码:(以windows登录为例子)

SqlConnection sqlConnection = new SqlConnection();                  //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(Local);Database=数据库名称;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            sqlConnection.Open();                                               //打开SQL连接;
            MessageBox.Show                                                     //在消息框中显示;
                ("连接状态:" + sqlConnection.State.ToString()                  //消息框消息内容;
                + "\n工作站标识:" + sqlConnection.WorkstationId
                + "\n服务器地址:" + sqlConnection.DataSource
                + "\n服务器版本:" + sqlConnection.ServerVersion
                + "\n数据库名称:" + sqlConnection.Database
                + "\n\n(单击【确定】后将关闭SQL连接)");
            sqlConnection.Close();                                              //关闭SQL连接;
            MessageBox.Show                                                     //在消息框中显示;
                ("连接状态:" + sqlConnection.State.ToString());

2.完成了最开始的数据库连接后接下来就是对数据库进行操作了。

操作的话我们分为四个部分,分别是增加,删除,修改和查找,他们有一个共同点就是都可以用DataGirdView进行直接操作。实现增删改查的过程中,要利用控件进行辅助,并结合相关数据库语句。

c#是通过@加变量名传值,通过AddWithValue方法赋值。

增加

  • 数据表
    • 使用DataGridView控件
  • 命令按钮
    • 写入
      • 调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;
    • 异常
      • 调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;捕捉SQL异常;若SQL异常编号为2627,则违反主键/唯一约束,即插入重复值;
    • 存储过程
      • 调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;指定SQL命令的命令文本;命令文本为存储过程名称;SQL命令的类型设为存储过程  
  • 删除
    • DateGridView控件
  • 更新
    • 记录
      • 调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;调用数据阅读器的方法GetOrdinal获取各列相应的索引值;
    • 使用DataGridView控件
  • 查找
    • 记录
      • 调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;调用数据阅读器的方法GetOrdinal获取各列相应的索引值;
    • 数据表
      • 借助DataGridView
    • 命令按钮
      • 查询标量
        • 调用SQL命令的方法ExecuteScalar来执行命令,并接受单个结果
      • 参数
        • 直接调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值;通过参数名称访问SQL参数
      • 参数方向
        • 保存与所输用户号相应的行计数,并从相应的输出参数值中获得行计数

三、代码示例&运行截图

增加&查询:示例(注册向管理员表中增加,登录则为从表中查询)

登录(查询)

SqlConnection sqlConnection = new SqlConnection();                                          //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=ZXYY;Integrated Security=sspi";                         //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            SqlCommand sqlCommand = sqlConnection.CreateCommand();
            SqlParameter sqlParameter = new SqlParameter(); //调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;
            if (radobtn_amdin.Checked == true)
            {
                sqlCommand.CommandText =
                   "SELECT COUNT(1) FROM 管理员 WHERE 帐号=@帐号 AND 密码=HASHBYTES('MD5',@密码);";   //指定SQL命令的命令文本;命令文本包含参数; 
                #region SQL参数用法1
                //声明并实例化SQL参数;
                sqlParameter.ParameterName = "@帐号";                                                         //设置SQL参数的名称;
                sqlParameter.Value = this.textbxid.Text.Trim();                                           //设置SQL参数的长度;
                sqlParameter.SqlDbType = SqlDbType.Char;                                                    //设置SQL参数对应的SQL Server数据类型;
                sqlParameter.Size = 10;                                                                     //设置SQL参数的长度;
                sqlCommand.Parameters.Add(sqlParameter);                                                    //向SQL命令的参数集合添加SQL参数;
                #endregion
                #region SQL参数用法2
                sqlCommand.Parameters.AddWithValue("@密码", this.textbxpsw.Text.Trim());             //直接调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值;
                sqlCommand.Parameters["@密码"].SqlDbType = SqlDbType.VarChar;                           //通过参数名称访问SQL参数,并将密码参数的类型设为变长字符串;
                //SQL参数能自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR;
                #endregion
            }
                if (radobon_doctor.Checked == true)
                {
                    sqlCommand.CommandText =
                   "SELECT COUNT(1) FROM 医生 WHERE 工号=@工号 AND 密码=HASHBYTES('MD5',@密码);";   //指定SQL命令的命令文本;命令文本包含参数; 
                    #region SQL参数用法1
                    //声明并实例化SQL参数;
                    sqlParameter.ParameterName = "@工号";                                                         //设置SQL参数的名称;
                    sqlParameter.Value = this.textbxid.Text.Trim();                                           //设置SQL参数的长度;
                    sqlParameter.SqlDbType = SqlDbType.Char;                                                    //设置SQL参数对应的SQL Server数据类型;
                    sqlParameter.Size = 10;                                                                     //设置SQL参数的长度;
                    sqlCommand.Parameters.Add(sqlParameter);                                                    //向SQL命令的参数集合添加SQL参数;
                    #endregion
                    #region SQL参数用法2
                    sqlCommand.Parameters.AddWithValue("@密码", this.textbxpsw.Text.Trim());             //直接调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值;
                    sqlCommand.Parameters["@密码"].SqlDbType = SqlDbType.VarChar;                           //通过参数名称访问SQL参数,并将密码参数的类型设为变长字符串;
                    //SQL参数能自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR;
                    #endregion
                }
                sqlConnection.Open();                                                                       //打开SQL连接;
                int rowCount = (int)sqlCommand.ExecuteScalar();                                             //调用SQL命令的方法ExecuteScalar来执行命令,并接受单个结果(即标量);
                sqlConnection.Close();                                                                      //关闭SQL连接;
                if (rowCount == 1)                                                                          //若查得所输用户号相应的1行记录;
                {
                    MessageBox.Show("登录成功。");
                    this.textbxid.Text = "";
                    this.textbxpsw.Text = "";//显示正确提示;
                    frm_kslist a=new frm_kslist();
                    a.Show ();
                }
                else                                                                                        //否则;
                {
                    MessageBox.Show("用户号/密码有误,请重新输入!");                                       //显示错误提示;
                    this.textbxpsw.Focus();                                                              //密码文本框获得焦点;
                    this.textbxpsw.SelectAll();                                                          //密码文本框内所有文本被选中;
                }

  增加(注册)

if (this.textbxid.Text.Trim() == "")                                                      //若用户号文本框为空;
            {
                MessageBox.Show("用户号不能为空!");                                                    //给出错误提示;
                this.textbxid.Focus();                                                                //用户号文本框获得焦点;
                return;                                                                                 //返回;
            }
            if (this.textbxpsw.Text.Trim() == "")                                                    //若密码文本框为空;
            {
                MessageBox.Show("密码不能为空!");                                                      //给出错误提示;
                this.textbxpsw.Focus();                                                              //密码文本框获得焦点;
                return;                                                                                 //返回;
            }
            SqlConnection sqlConnection = new SqlConnection();                                          //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=ZXYY;Integrated Security=sspi";                         //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            SqlCommand sqlCommand = sqlConnection.CreateCommand();
            if (radobtn_amdin.Checked == true)
            {//调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;
                sqlCommand.CommandText =
                    "INSERT 管理员 (帐号,密码) VALUES(@帐号,HASHBYTES('MD5',@密码));";                 //指定SQL命令的命令文本;命令文本包含参数;
                sqlCommand.Parameters.AddWithValue("帐号", this.textbxid.Text.Trim());                     //向SQL命令的参数集合添加参数的名称、值;
                sqlCommand.Parameters.AddWithValue("密码", this.textbxpsw.Text.Trim());
                sqlCommand.Parameters["密码"].SqlDbType = SqlDbType.VarChar;
            }
            if (radobon_doctor.Checked ==true )
            {//调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;
                sqlCommand.CommandText =
                    "INSERT 医生 (工号,密码) VALUES(@工号,HASHBYTES('MD5',@密码));";                 //指定SQL命令的命令文本;命令文本包含参数;
                sqlCommand.Parameters.AddWithValue("工号", this.textbxid.Text.Trim());                     //向SQL命令的参数集合添加参数的名称、值;
                sqlCommand.Parameters.AddWithValue("密码", this.textbxpsw.Text.Trim());
                sqlCommand.Parameters["密码"].SqlDbType = SqlDbType.VarChar;
            }  //将密码参数的类型设为变长字符串;
                //SQL参数自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR;
                int rowAffected = 0;                                                                        //声明整型变量,用于保存受影响行数;
                string message = "";                                                                        //声明字符串变量,用于保存消息;
                try                                                                                         //尝试;
                {
                    sqlConnection.Open();                                                                   //打开SQL连接;
                    rowAffected = sqlCommand.ExecuteNonQuery();                                             //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;
                }
                catch (SqlException sqlEx)                                                                  //捕捉SQL异常;
                {
                    if (sqlEx.Number == 2627)                                                               //若SQL异常编号为2627,则违反主键/唯一约束,即插入重复值;
                    {
                        message = "您注册的用户号已存在,请重新输入!";
                        this.textbxid.Text = "";
                        this.textbxpsw.Text = "";//给出合适的错误提示;
                    }
                    else                                                                                    //否则;
                    {
                        message = "注册失败!";                                                             //给出一般错误提示;
                    }
                }
            finally                                                                                     //结束;
                {
                    sqlConnection.Close();                                                                  //关闭SQL连接;
                }
                if (rowAffected == 1)                                                                       //若成功写入1行记录;
                {
                    message = "注册成功。";
                    this.textbxid.Text = "";
                    this.textbxpsw.Text = "";//给出正确提示;
                }
                MessageBox.Show(message); 
                //显示提示;

  运行结果

更改:

SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                             //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
            sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
                "UPDATE tb_Student"
                + " SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,ClassNo=@ClassNo,Speciality=@Speciality"
                + " WHERE No=@No;";
            sqlCommand.Parameters.AddWithValue("@Name", this.txb_Name.Text.Trim());                         //向SQL命令的参数集合添加参数的名称、值;
            sqlCommand.Parameters.AddWithValue("@Gender", this.rdb_Male.Checked);
            sqlCommand.Parameters.AddWithValue("@BirthDate", this.dtp_BirthDate.Value);
            sqlCommand.Parameters.AddWithValue("@ClassNo", (int)this.cmb_Class.SelectedValue);
            sqlCommand.Parameters.AddWithValue("@Speciality", this.txb_Speciality.Text.Trim());     
            sqlCommand.Parameters.AddWithValue("@No", "3120707001");                                       
            sqlConnection.Open();                                                                           //打开SQL连接;
            int rowAffected = sqlCommand.ExecuteNonQuery();                                                 //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;
            sqlConnection.Close();                                                                          //关闭SQL连接;
            MessageBox.Show("更新" + rowAffected.ToString() + "行。"); 

  

接下来对DataGrideView的增删改查内容进行介绍:

点击提交,实现增删改查的功能:

SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                             //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            SqlCommand insertCommand = new SqlCommand();                                                    //声明并实例化SQL命令;该命令用于插入记录;
            insertCommand.Connection = sqlConnection;                                                       //将SQL命令的连接属性指向SQL连接;
            insertCommand.CommandText =                                                                     //指定SQL命令的命令文本;
                "INSERT tb_Student"
                + "(No,Name,Gender,BirthDate,Class,Speciality)"
                + " VALUES(@No,@Name,@Gender,@BirthDate,@Class,@Speciality);";
            insertCommand.Parameters.Add("@No", SqlDbType.Char, 10, "No");                                  //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
            insertCommand.Parameters.Add("@Name", SqlDbType.VarChar, 0, "Name");                                 
            insertCommand.Parameters.Add("@Gender", SqlDbType.VarChar, 0, "Gender");
            insertCommand.Parameters.Add("@BirthDate", SqlDbType.VarChar, 0, "BirthDate");
            insertCommand.Parameters.Add("@Class", SqlDbType.VarChar, 0, "Class");
            insertCommand.Parameters.Add("@Speciality", SqlDbType.VarChar, 0, "Speciality");
            SqlCommand updateCommand = new SqlCommand();                                                    //声明并实例化SQL命令;该命令用于更新记录;
            updateCommand.Connection = sqlConnection;                                                       //将SQL命令的连接属性指向SQL连接;
            updateCommand.CommandText =                                                                     //指定SQL命令的命令文本;
                "UPDATE tb_Student"
                + " SET No=@NewNo,Name=@Name,Gender=@Gender,BirthDate=@BirthDate,Class=@Class,Speciality=@Speciality"
                + " WHERE No=@OldNo;";
            updateCommand.Parameters.Add("@NewNo", SqlDbType.Char, 10, "No");                               //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
            updateCommand.Parameters.Add("@Name",SqlDbType.VarChar,0,"Name");                              
            updateCommand.Parameters.Add("@Gender", SqlDbType.VarChar, 0, "Gender");
            updateCommand.Parameters.Add("@BirthDate", SqlDbType.VarChar, 0, "BirthDate");
            updateCommand.Parameters.Add("@Class", SqlDbType.VarChar, 0, "Class");
            updateCommand.Parameters.Add("@Speciality", SqlDbType.VarChar, 0, "Speciality");
            updateCommand.Parameters.Add("@OldNo", SqlDbType.Char, 10, "No");                               //若学号发生更改,则还需提供旧学号,以便查询要更改的行;
            updateCommand.Parameters["@OldNo"].SourceVersion = DataRowVersion.Original;                     //旧学号的来源版本,为数据行版本中的原始值;
            SqlCommand deleteCommand = new SqlCommand();                                                    //声明并实例化SQL命令;该命令用于删除;
            deleteCommand.Connection = sqlConnection;                                                       //将SQL命令的连接属性指向SQL连接;
            deleteCommand.CommandText =                                                                     //指定SQL命令的命令文本;
                "DELETE tb_Student"
                + " WHERE No=@No;";
            deleteCommand.Parameters.Add("@No", SqlDbType.Char, 10, "No");
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器;
            sqlDataAdapter.InsertCommand = insertCommand;                                                   //将SQL数据适配器的属性InsertCommand指向用于插入记录的SQL命令;
            sqlDataAdapter.UpdateCommand = updateCommand;                                                   //将SQL数据适配器的属性UpdateCommand指向用于更新记录的SQL命令;
            sqlDataAdapter.DeleteCommand = deleteCommand;                                                   //将SQL数据适配器的属性DeleteCommand指向用于删除记录的SQL命令;
            DataTable studentTable1 = (DataTable)this.dgv_Score.DataSource;                                 //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
            sqlConnection.Open();                                                                           //打开SQL连接;
            int rowAffected = sqlDataAdapter.Update(studentTable1);                                         //SQL数据适配器根据学生数据表提交所有更新,并返回受影响行数;
            sqlConnection.Close();                                                                          //关闭SQL连接;
            MessageBox.Show("更新" + rowAffected.ToString() + "行。");                                      //在消息框显示受影响行数;

  

猜你喜欢

转载自www.cnblogs.com/nicestlala/p/9829511.html