数据库笔记(基础|存储并读取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])();

 

 

 

原文地址:https://www.cnblogs.com/zhangxiaoshuang/p/6437124.html