SQLServer操作命令、备份还原、C#代码使用

操作命令

启动后默认占用1433端口。windows+r后输入cmd,正常进入命令行后如下执行,参考网站:sqlserver 命令行的使用_命令行使用sqlserver-CSDN博客

数据类型

SQL Server 支持多种数据类型,包括整数、浮点数、字符、日期、文本、货币、位(布尔型)、二进制等。

  1. 整数类型:如 INT、SMALLINT、BIGINT 等,用于存储整数值,范围从-2^31(约-20亿)到2^31-1(约20亿)。
  2. 浮点数类型:如 FLOAT、REAL,用于存储小数或近似数值。
  3. 字符类型:如 NVARCHAR、VARCHAR、CHAR,用于存储字符串。
  4. 日期和时间类型:如 DATE、TIME、DATETIME、DATETIMEOFFSET、TIMESTAMP,用于存储日期和时间信息。
  5. 文本类型:如 TEXT、NTEXT,用于存储大量文本数据。
  6. 货币类型:如 MONEY、SMALLMONEY,专门用于金融计算。
  7. 位类型:BIT,相当于布尔类型,用于存储真/假值。
  8. 二进制类型:如 BINARY、VARBINARY,用于存储二进制数据。

此外,SQL Server 还支持一些其他特定用途的数据类型,如 UNIQUEIDENTIFIER、XML、HIERARCHYID、CURSOR、SQL_VARIANT 和 CLR 类型等。

数据库命令

# go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个go),每个被GO分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。
go
# 查看database中有哪些表
use my_db;
select * from sys.tables;

-- 列名group与命令名重复,所以用[group]
-- DATEDIFF以秒为单位计算起始时间Time到结束时间ResumeTime的总时间到date_diff
SELECT priority,[group],Time,DATEDIFF(MINUTE, Time, ResumeTime) as date_diff, description
    FROM BackMessage.dbo.Messages
    where ResumeTime is not null order by date_diff desc;
    
-- 判断表是否存在BackMessage
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'BackMessage')
    BEGIN
        PRINT '数据库存在'
    END
    ELSE
    BEGIN
        PRINT '数据库不存在'
    END
 
 -- 数据库不存在则创建
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'BackMessage')
BEGIN
    CREATE DATABASE BackMessage
END

-- 数据库中表是否存在,不存在就创建该表,其中ID为自增,INFORMATION_SCHEMA
IF NOT EXISTS (SELECT * FROM BackMessage.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'BoatPathInfo')
BEGIN
    PRINT '表不存在'
    CREATE TABLE BackMessage.dbo.BoatPathInfo (
        Id INT PRIMARY KEY IDENTITY(1,1) not null,
    OperationTime datetime,
    EquipmentName nvarchar(50),
    Description nvarchar(200),
    RecipeTotalTime nvarchar(200)
    )
END
else
begin
    print '表已经存在'
end

-- 查看有哪些数据库
SELECT name FROM sys.databases;

-- 查询对应数据库中有哪些表
USE BackMessage;
GO
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';

-- 删除表
DROP TABLE BackMessage.dbo.BoatPathInfo;

-- 查询前三个
SELECT TOP 3 * FROM 表名;

-- 我的查询第一个名代码,这是调试软件中代码,C#中不需要[xx]
select top 1 * from [BackMessage].[dbo].[BoatPathInfo] order by OperationTime desc;

-- 查询指定时间范围一类
SELECT 
    MIN(rEnergyFw1) AS FirstData1, MAX(rEnergyFw1) AS LastData1,
    MIN(rEnergyFw2) AS FirstData2, MAX(rEnergyFw2) AS LastData2,
    MIN(totalEnergyFw) AS FirstData1, MAX(totalEnergyFw) AS LastData3,
    MAX(rEnergyFw1) - MIN(rEnergyFw1) as fw1,
    MAX(rEnergyFw2) - MIN(rEnergyFw2) as fw2,
    MAX(totalEnergyFw) - MIN(totalEnergyFw) as totalFw
FROM [TPM].[dbo].[ElectricMeter]
WHERE update_time between '2024/6/1 00:00:00' and '2024/8/8 12:14:39';

-- 月份自己递增,查询每月用电数据
DECLARE @StartDate DATE = '2024-03-01'; -- 起始日期
DECLARE @EndDate DATE = '2024-09-01'; -- 结束日期
DECLARE @CurrentDate DATE = @StartDate; -- 当前日期
DECLARE @MonthsToIncrement INT = 6; -- 递增的月份数
WHILE @CurrentDate <= @EndDate
BEGIN
    -- 在这里执行你的查询操作,例如:
    SELECT @CurrentDate,
        MAX(rEnergyFw1) - MIN(rEnergyFw1) as fw1,
        MAX(rEnergyFw2) - MIN(rEnergyFw2) as fw2,
        MAX(totalEnergyFw) - MIN(totalEnergyFw) as totalFw
    FROM [TPM].[dbo].[ElectricMeter]
    WHERE update_time between @CurrentDate and DATEADD(MONTH, 1, @CurrentDate);

    -- 递增一个月
    SET @CurrentDate = DATEADD(MONTH, 1, @CurrentDate);
END 

代码使用

  • 引用System.Data.SqlClient;和System.Data;
  • trusted_connection=true表示Integrated Security=SSPI; 如果连接字符串中不存在,则需要在连接字符串中指定userid和password: server=yourservername;database=yourdatabase;user id=YourUserID;password=password
  • SqlConnection连接;SqlDataAdapter适配使用其函数Fill填充到DataTable中,DataTable可以通过XY行列纵列读写
//引入命名空间
using System.Data.SqlClient;
using System.Data;
using System.Data.SQLite;
using System.Diagnostics;
using EntDll;
using System.Collections.Specialized;

class MainClass
{
    // m_sqlServer.Connect("server=127.0.0.1;User Id=sa;Password=123456;database=TPM");
    public static string MessConString = "server=127.0.0.1;Trusted_Connection=SSPI;database=Message"; //"server=127.0.0.1;uid=sa;pwd=123456;database=Message";Environment
    public static void Main()
    {
        string cmd = "select * from Messages";

        DataTable dt = new DataTable();
        try
        {
            using (SqlConnection cn = new SqlConnection(MessConString))
            {
                cn.Open();    //cn为连接对象      
                using (SqlDataAdapter madapter = new SqlDataAdapter(cmd, cn))
                {
                    int count = madapter.Fill(dt);
                    cn.Close();
                    madapter.Dispose();
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                Console.WriteLine(dt.Rows[i][j].ToString() + " ");
            }
            Console.WriteLine();
        }

        Console.WriteLine("数据库读取完毕");
    }
}

自动创建数据库和数据表

using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows.Forms;

string BackBoatConString = "server=127.0.0.1;Trusted_Connection=SSPI;";
// 初始化数据库和表
bool ok;
ok = SqlHelper.CreateDataBase(BackBoatConString, "BackMessage");
// ID、操作时间、设备名、描述、配方时长
string tableParas = "Id INT PRIMARY KEY IDENTITY(1,1) not null,\r\n OperationTime datetime,\r\n " +
    "EquipmentName nvarchar(50),\r\n Description nvarchar(200),\r\n RecipeTotalTime nvarchar(200)";
ok &= SqlHelper.CreateTable(BackBoatConString, "BackMessage", "BoatPathInfo", tableParas);
if (!ok)
    return;

/// <summary>
/// 创建数据库
/// </summary>
/// <param name="connectStr">Sqlserver连接命令</param>
/// <param name="databaseName">库名</param>
/// <returns></returns>
public static bool CreateDataBase(string connectStr, string databaseName)
{
    string cmd = "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '" + databaseName + @"')
        BEGIN
            CREATE DATABASE " + databaseName +
        "\r\nEND";
    try
    {
        using (SqlConnection cn = new SqlConnection(connectStr))
        {
            cn.Open();    //cn为连接对象      
            using (SqlCommand sqlCmd = new SqlCommand(cmd, cn))
            {
                sqlCmd.ExecuteNonQuery();
            }
            cn.Close();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString(), "数据库创建失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return false;
    }
    return true;
}

 // 创建表,对应连接地址,数据库名,表名,参数内容
public static bool CreateTable(string connectStr, string databaseName, string tableName, string paras)
{
    string cmd = "IF NOT EXISTS (SELECT * FROM " + databaseName + 
        ".INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '" + tableName + @"')
        BEGIN
            CREATE TABLE " + databaseName + ".dbo." + tableName + "(\r\n" + paras + @" )
        END";
    try
    {
        using (SqlConnection cn = new SqlConnection(connectStr))
        {
            cn.Open();    //cn为连接对象      
            using (SqlCommand sqlCmd = new SqlCommand(cmd, cn))
            {
                sqlCmd.ExecuteNonQuery();
            }
            cn.Close();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString(), "数据表创建失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return false;
    }
    return true;
}

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值