zoukankan      html  css  js  c++  java
  • 数据库笔记(基础|存储并读取Color|读取数据库geometry类型)

    1、基础

      (1)配置文件app.config

         在哪里要使用数据库就需要把这个贴到哪里,配置了连接字符串

    <appSettings>
    
    <add key="connectionString" value="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\project\vs2015_project\WinGis\DAL\App_Data\WinGis.mdf;Integrated Security=True;Connect Timeout=30"/>
    
    </appSettings>
    


      (2)SQL语句

    •     $为转义字符串
    •     当是固定的表名时直接用表名;
    //表名是Layer,列名是Layer_ID,Layer_name
    
    string cmdText = $"select Layer_ID,Layer_name from Layer";
    •     当插入一个值时,如果是int类型,用{}将该int型对象括起来{int},如果是字符串类型,用’{}’将该字符串类型对象括起来'{string}';
    // LayerIdValue是int类型,LayerNameValue是string类型
    
    string cmdText = $"insert into Layer values({layerIdValue},'{layerNameValue}',{layerTypeValue})";
    •     当表名不固定时,[{tableName}],当列名不固定时,{colName}
    // tableName是string类型,代表了可能的表名,colName是string类型,代表了可能的列名
    
    string cmdText = $"delete from [{tableName}] where {colName}='{colValue}'";

      (3)定义数据库类,读取数据

    using System.Data.SqlClient;
    
    using System.Configuration;
    
    public class DataHelper
    
        {
    
            private SqlConnection _sqlConnection;
    
            public DataHelper()
    
            {
    
                //配置文件,连接字符串
    
                string i = ConfigurationManager.AppSettings["connectionString"];
    
                _sqlConnection = new SqlConnection(i);
    
    }
    
    public List<PointEx> GetPoints(int layerId)
    
            {
    
                this._sqlConnection.Open();
    
                SqlCommand scmd = this._sqlConnection.CreateCommand();
    
            string cmdText = $"select point.* from point, Layer_Point where Layer_Point.Layer_ID={layerId} AND point.Point_ID=Layer_Point.Point_ID;";
    
     
    
                scmd.CommandText = cmdText;
    
                //在数据库中执行,一个函数字符串只能定义一个
    
                var reader = scmd.ExecuteReader();            List<PointEx> ret = new List<PointEx>();
    
                while (reader.Read())
    
                {
    
                    var pid = (int)reader.GetValue(0);
    
                    var color = (string)reader.GetValue(1);
    
                    color.Trim();
    
                 var color2 = System.Drawing.Color.FromArgb(Convert.ToInt32(color));
    
     
    
                    var size = (int)reader.GetValue(2);
    
                    var type = (int)reader.GetValue(3);
    
                    var point = (SqlGeometry)reader.GetValue(4);
    
                    PointEx p = new PointEx()
    
                    {
    
                        Id = pid,
    
                        Color = color2,
    
                        Size = size,
    
                        Point = new Point(Convert.ToInt32(point.STX.Value),Convert.ToInt32(point.STY.Value)),
    
                        Type = type
    
                    };
    
                    ret.Add(p);
    
                }
    
                this._sqlConnection.Close();
    
                return ret;
    
            }
    
    }


    2、存储并读取Color类型

      颜色在数据库中存储类型为char(16),显示为一串数字(RGB值)。

      读取时,添加头文件:Using System.Drawing;读转换句:Color color= System.Drawing.Color.FromArgb(Convert.ToInt32(CL));

    //从数据库中读取颜色值
    
    var color = (string)reader.GetValue(1);
    
    //Trim()删除字符串头部及尾部出现的空格
    
    color.Trim();
    
    //将color转换为Color类型
    
    var color2 = System.Drawing.Color.FromArgb(Convert.ToInt32(color));

     

    存储时,

    //定义一个Color类型的对象
    
    Color color= Color.AliceBlue;
    
    //将其转换为字符串类型,数据库中存储的就是这个str
    
    string str=color.ToArgb().ToString();

    3、读取数据库geometry类型

    • 首先需要在vs中安装Microsoft.SqlServer.Types10.50(可以在NuGet包中安装);
    • 头文件引用:using Microsoft.SqlServer.Types;
    • 获得数据库geometry对象存储的点对象:
    //读取数据库的geometry对象
    
    var point = (SqlGeometry)reader.GetValue(4);
    
    //将读取的对象转换为点对象,using System.Drawing
    
    Point = new Point(Convert.ToInt32(point.STX.Value),Convert.ToInt32(point.STY.Value));

    • 获得数据库geometry对象存储的线对象:

        //首先自己定义了一个Line类

     

    //取出数据库geometry对象
    
    var line = (SqlGeometry)reader.GetValue(3);
    
    //将该对象转换为字符串
    
    var temp = line.ToString();
    
    //转换为SqlGeometry对象
    
    SqlGeometry geo = SqlGeometry.Parse(temp);
    
    //获得数量
    
    int num = geo.STNumPoints().Value;
    
    for (int i = 1; i <= num; ++i)
    
    {
    
    //取出line的两个端点
    
    SqlGeometry geo1 = SqlGeometry.Parse(geo.STPointN(i).ToString());
    
    int x = Convert.ToInt32(geo1.STX.Value);
    
    int y = Convert.ToInt32(geo1.STY.Value);
    
    //坐标X
    
    point[i - 1].X = x;
    
    //坐标Y
    
    point[i - 1].Y = y;
    
    }
    
    Line p = new Line(point[0],point[1])();

     

     

     

  • 相关阅读:
    CTF-cookies欺骗
    CTF-速度要快100
    php实现登录注册界面
    CTF-秋名山老司机 100
    三大类型语句
    PHP运算符
    标记风格和注释
    连接串口服务器时的注意事项
    RS485转以太网的概述和应用领域
    工业级路由器的优点有哪些
  • 原文地址:https://www.cnblogs.com/zhangxiaoshuang/p/6437124.html
Copyright © 2011-2022 走看看