• 实现简易赈灾物资发放登记系统---再次练习


    知识点:
    1.为了保证链接始终能够关闭,一般要使用try...finally..。
    把链接打开放在try中,把链接关闭放在finally中。
    例:
    try
    {
        conn.Open();
        ...
    }
    finally
    {
        conn.Close();
        ...
    }
    2.使用一个函数返回SqlDataReader,简化代码,但还要保证链接能够关闭。
    例:
    public SqlDataReader GETSqldatareader(string name)
    {
       ....
    }
    执行命令时,如果关闭关联的DataReader对象(dr),则关联的Connection对象(conn)也关闭。
    例:
    SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    ....
    dr.Close();

    3.为了保证数据的安全性---使用命令参数:

    cmd.CommandText = ".....@uid ....";
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@uid","值")
    cmd.ExecuteXXXXX();

    4.ExecuteScalar()执行SQL语句,返回首行首列中的值。
     它一般用来执行聚合函数的查询。(没有练习...)

    5.事务Transaction
    ACID - A原子性。C一致性。I-隔离性。D持久性。
    两类事务:
    链接内事务:在链接打开后,使用事务控制多条语句的执行。
    1.创建事务对象。
    SqlTransanction trans = conn.BeginTransaction(); //注意必须是链接打开后编写
    2.把事务对象挂到命令对象上,让命令执行带有事务的功能。
    cmd.Transaction = trans;

    3.按照之前所讲得执行命令操作数据库
    a.成功后调用事务对象的Commit()方法来提交执行的结果。
    b.失败后调用事务对象的Rollback()方法来回滚执行前的状态。

    物资赈灾发放代码:

    namespace ConsoleApplication40
    {
        class Program
        {
            public const string CONNECTIONSTRING =

    "server=.;database=zhenzai;uid=sa;pwd=5587725";
            //简化代码,还要保证能链接能够关闭
            static SqlDataReader GETSqldatareader(string name)
            {
                SqlConnection conn = new SqlConnection(CONNECTIONSTRING);

                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = "select * from KC where WzName=@name";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@name", name);
                //执行命令时,如果关闭关联的DataReader对象(dr),则关联的Connection对象(conn)也

    关闭
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return dr;
            }
            //库存增加
            static void ADDKC()
            {
                Console.WriteLine("物资库存维护");
                Console.Write("请输入物资名称:");
                string name = Console.ReadLine();
                Console.Write("请输入计量单位:");
                string unit = Console.ReadLine();
                Console.Write("请输入库存数量:");
                int num = Convert.ToInt32(Console.ReadLine());
                Console.Write("请输入物资单价:");
                decimal price = Convert.ToDecimal(Console.ReadLine());

                //数据库操作
                SqlConnection conn = new SqlConnection(CONNECTIONSTRING);
                //打开数据库
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                //设置链接内事务
                SqlTransaction trans = conn.BeginTransaction();//使用链接对象创建事务对象
                //把事务对象挂到命令对象上,让命令执行带有事务对象的功能
                cmd.Transaction = trans;
                try
                {
                    //cmd.CommandText = "insert into KC values('" + name + "','" + num + "','"

    + unit + "','" + price + "')";
                    //使数据更安全,不会被攻击
                    cmd.CommandText = "insert into KC values(@name,@num,@unit,@price)";
                    cmd.Parameters.Clear();//将原有的数据清一把
                    cmd.Parameters.AddWithValue("@name", name);
                    cmd.Parameters.AddWithValue("@num", num);
                    cmd.Parameters.AddWithValue("@unit", unit);
                    cmd.Parameters.AddWithValue("@price", price);

                    cmd.ExecuteNonQuery();

                    trans.Commit();//成功后提交执行的结果
                }
                catch (Exception ex)
                {

                    Console.WriteLine(ex.Message);//将发生错误的信息输出出来
                    trans.Rollback();//失败后回滚执行前的结果
                }
                finally
                {
                    conn.Close();
                }
                Console.Write("添加成功");
               
            }
            //显示库存
            static void ShowKC()
            {
                Console.WriteLine("物资库存列表如下:");
                Console.WriteLine("*********************************************************");
                Console.WriteLine("物资名称 库存数量 单价(元)");

                SqlConnection conn = new SqlConnection(CONNECTIONSTRING);//创建链接
                try
                {
                    conn.Open();
                    SqlCommand cmd = conn.CreateCommand();//创建链接-命令对象
                    cmd.CommandText = "select * from KC";
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        Console.WriteLine(dr["WzName"].ToString() + " " + dr

    ["Num"].ToString() + dr["Unit"] + " " + dr["Price"].ToString());
                    }
                }
                finally
                {
                    conn.Close();
                }

                Console.WriteLine("*********************************************************");
            }
            //发放物资
            static void FaFang()
            {
                Console.WriteLine("物资发放");
                Console.Write("请输入发放物资:");
                string name = Console.ReadLine();
                Console.WriteLine("当前单价:"+GETprice(name));
                Console.WriteLine("当前库存:"+GETnum(name)+GETunit(name));

                Console.Write("请输入发放数量:");
                int n = Convert.ToInt32(Console.ReadLine());
                Console.Write("接收人:");
                string receiver = Console.ReadLine();
                //向发放表中插入数据
                ADDFaFang(name,n,GETunit(name),GETprice(name),DateTime.Now,receiver);
                Console.WriteLine("物资发放成功");
            }
            //获取价格
            static decimal GETprice(string name)
            {
                decimal price=0;
                SqlDataReader dr = GETSqldatareader(name);
                dr.Read();
                price = Convert.ToDecimal(dr["Price"]);
                dr.Close();//在此关闭前面调用GETSqldatareader,未关闭的链接
                return price;
            }
            //获取数量
            static int GETnum(string name)
            {
                int num = 0;
                SqlDataReader dr = GETSqldatareader(name);
                dr.Read();
                num = Convert.ToInt32(dr["Num"]);
                dr.Close();
                return num;
            }
            //获取数量单位
            static string GETunit(string name)
            {
                string unit = "";
                SqlDataReader dr = GETSqldatareader(name);
                dr.Read();
                unit =dr["Unit"].ToString();
                dr.Close();
                return unit;
            }
            //插入物资发放表
            static void ADDFaFang(string wzname,int n,string unit,decimal price,DateTime

    fadate,string receiver)
            {
                SqlConnection conn = new SqlConnection(CONNECTIONSTRING);//链接数据库
                conn.Open();//打开数据库
                SqlCommand cmd = conn.CreateCommand();//创建数据对象

                SqlTransaction trans = conn.BeginTransaction();//使用链接对象创建事务对象
                cmd.Transaction = trans;//将事务对象挂靠在命令对象上,使命令对象具有事务对象的

    功能
                try//为了保证链接始终能够关闭,使用try...finally...把链接打开内容放在try中,把

    关闭放在finally中
                {
                    cmd.CommandText = "update KC set Num=Num-@fanum where WzName=@wzname";
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@fanum", n);
                    cmd.Parameters.AddWithValue("@wzname", wzname);
                    cmd.ExecuteNonQuery();

                    cmd.CommandText = "insert into FaFang values

    (@wzname,@fanum,@unit,@faprice,@fadate,@receiver)";//操作数据库
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@wzname", wzname);
                    cmd.Parameters.AddWithValue("@fanum", n);
                    cmd.Parameters.AddWithValue("@unit", unit);
                    cmd.Parameters.AddWithValue("@faprice", price);
                    cmd.Parameters.AddWithValue("@fadate", fadate);
                    cmd.Parameters.AddWithValue("@receiver", receiver);
                    cmd.ExecuteNonQuery();

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    trans.Rollback();
                }
                finally
                {
                    conn.Close();
                }
                
            }
            //显示发放明细
            static void ShowFaFang()
            {
                Console.WriteLine("物资发放统计");
                Console.WriteLine

    ("*************************************************************");
                Console.WriteLine("物资名称 发放数量 单价(元) 接收人");

                SqlConnection conn = new SqlConnection(CONNECTIONSTRING);
                try
                {
                    conn.Open();
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "select * from FaFang";
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        Console.WriteLine(dr["WzName"].ToString()+" "+dr["fanum"].ToString

    ()+dr["unit"].ToString()+" "+dr["faprice"]+" "+dr["receiver"]);
                    }
                }
                finally
                {
                    conn.Close();
                }
                Console.WriteLine

    ("*************************************************************");

            }
            static void Main(string[] args)
            {
                while (true)
                {
                    Console.Clear();
                    Console.WriteLine("赈灾物资发放登记系统");
                    Console.WriteLine("1.物资库存维护");
                    Console.WriteLine("2.物资库存列表");
                    Console.WriteLine("3.物资发放");
                    Console.WriteLine("4.物资发放统计");
                    Console.WriteLine("5.退出系统");
                    Console.Write("请输入您的操作指令:");
                    string menu = Console.ReadLine();
                    if (menu=="5")
                    {
                        break;
                    }
                    else if (menu=="1")
                    {
                        ADDKC();
                        Console.ReadKey();
                    }
                    else if (menu == "2")
                    {
                        ShowKC();
                        Console.ReadKey();
                    }
                    else if (menu == "3")
                    {
                        FaFang();
                        Console.ReadKey();
                    }
                    else if (menu == "4")
                    {
                        ShowFaFang();
                        Console.ReadKey();
                    }
                }
               

            }
        }
    }

  • 相关阅读:
    Theano入门笔记1:Theano中的Graph Structure
    [译博文]CUDA是什么
    一天一经典Efficient Estimation of Word Representations in Vector Space
    Generating a Random Sample from discrete probability distribution
    关于representation的理解
    git代码管理——克隆项目到本地仓库及上传本地项目到仓库
    yum管理——linux字符界面安装图形化及两种界面的切换(3)
    yum管理——yum常用配置(2)
    yum管理——搭建iso镜像私有yum源仓库(1)
    apche编译安装
  • 原文地址:https://www.cnblogs.com/likaixuan/p/4490539.html
Copyright © 2020-2023  润新知