C# Asp.net 从DetailsView编辑状态获取输入框内容,作为sql语句where条件,获取另一张表属性值,并将值赋给DetailsViewInserting事件

今天同学找我问asp.net的作业问题,他做的是一个图书馆管理的项目,然后想实现这样的一个功能,即有个图书清单页面,当点击清单中的书名时,会跳转到借书记录页面,然后会有一个用来输入学号的输入框,当输入学号并点击插入时,会自动生成一条包括书籍名,借书时间,学号,学生姓名,学生联系方式等在内的借书订单记录;

书籍名的生成很好做,直接通过请求字符串的Get方法拿到就行了,借书时间更简单,直接获取系统当前时间就行,就是如何获取姓名和联系方式难住了他,因为牵扯到要从另一张表(学生信息表)中拿到姓名和联系方式的值(而且要通过他输入的学号进行筛选);

其实我之前已经跟说过实现的逻辑了, 逻辑很简单,只需要在他插入学号这条信息时,拿到学号的值,然后连接数据库,与学生信息表里的学号做比对(where子句),读取表中拿到的姓名与联系方式的值,并将读取到的值赋给要插入的属性,这样就生成一张具有完整信息的借书记录了;

虽然逻辑上没什么问题,但是具体实现起来就涉及很多繁杂的细节了,所以一时难住了他,今天又找了问我,我也看了好几篇博客,虽然都是零零散散的技术细节,但是组合起来也让我成功将其实现,中间也碰到了几次异常,不过都是小问题,下面附上完整的后台实现代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected string shu( object sh) {
      
        string shum = Request.QueryString.Get("书籍名");
        return shum;
    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        
        SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\图书馆信息数据库.mdf;Integrated Security=True;User Instance=True");
        using(conn)
        {
            conn.Open();

            //定义标量变量
            SqlParameter[] mysqlpara1 = new SqlParameter[2];
            mysqlpara1[0] = new SqlParameter("@uid", SqlDbType.NChar, 10);
            mysqlpara1[0].Value = ((TextBox)this.DetailsView1.FindControl("TextBox2")).Text.Trim();

            //获取到DetailsView中TextBox2的输入值
            string uid = ((TextBox)this.DetailsView1.FindControl("TextBox2")).Text.Trim();
            SqlCommand cmd = conn.CreateCommand();

            //声明标量变量@uid
            cmd.Parameters.AddWithValue("@uid",uid);
            //构建查询语句
            cmd.CommandText = "SELECT * FROM [Student] WHERE 学号 = @uid";

            //读取查询到的值
            SqlDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                string name = reader.GetString(reader.GetOrdinal("姓名"));
                string tel = reader.GetString(reader.GetOrdinal("联系电话"));
                //将读取到的值赋给要插入的属性
                e.Values["姓名"] = name;
                e.Values["联系方式"] = tel;
            }

        }
        e.Values["借出时间"] = DateTime.Now;
        e.Values["书籍名"] = Request.QueryString.Get("书籍名");
        

    }
}

欢迎各位喜欢C#的网友学习交流!

你可能感兴趣的:(C#)