欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET Core开发日志——ADO.NET与SQL Server

程序员文章站 2022-05-25 15:49:45
在.NET世界,如果想要对数据库进行操作,总少不了ADO.NET的身影。在.NET Core里同样离不开那些熟悉的类库与API。这里简略地介绍下如何通过ADO.NET对SQL Server进行不同的处理。 System.Data.SqlClient 第一步先在项目工程中查看有无System.Data ......

在.net世界,如果想要对数据库进行操作,总少不了ado.net的身影。在.net core里同样离不开那些熟悉的类库与api。这里简略地介绍下如何通过ado.net对sql server进行不同的处理。

system.data.sqlclient

第一步先在项目工程中查看有无system.data.sqlclient引用,如果没有的话,可以用以下三种方式安装:

  • visual studio上的可视化nuget包管理工具(manage nuget packages),找到相应类库,点击安装按钮
  • 同样是visual studio上的包管理控制台(package manager console) 输入命令,install-package system.data.sqlclient
  • 命令行界面(cli) 中使用命令,dotnet add package system.data.sqlclient

查询

可以使用最基础的executereader方法:

using (var conn = new sqlconnection("server=.;integrated security=true"))
{
    conn.open();
    using (var cmd = new sqlcommand("select top 10 * from [adventureworks2016ctp3].[person].[person]", conn))
    {
        using (var reader = cmd.executereader())
        {
            while (reader.read())
            {
                console.writeline(reader["firstname"]);
            }
        }
    }
}

在.net core 2.0以后还可以使用sqldataadapter与dataset,看得出微软在向后兼容方面做了不少工作:

using (var conn = new sqlconnection("server=.;integrated security=true"))
{
    var adapter = new sqldataadapter("select top 10 * from [adventureworks2016ctp3].[person].[person]", conn);
    var dataset = new dataset();
    adapter.fill(dataset);
    var dt = dataset.tables[0];
    foreach (var item in dt.rows)
    {
        var row = item as datarow;
        console.writeline(row["firstname"]);
    }
}

插入

using (var conn = new sqlconnection("server=.;integrated security=true"))
{
    conn.open();
    using (var cmd = new sqlcommand("insert into [adventureworks2016ctp3].[person].[addresstype] (name) values(@name)", conn))
    {
        cmd.parameters.addwithvalue("@name", "test");
        cmd.executenonquery();
    }
}

更新

using (var conn = new sqlconnection("server=.;integrated security=true"))
{
    conn.open();
    using (var cmd = new sqlcommand("update [adventureworks2016ctp3].[person].[addresstype] set name = @name where name = @criterion", conn))
    {
        cmd.parameters.addwithvalue("@name", "test2");
        cmd.parameters.addwithvalue("@criterion", "test");
        cmd.executenonquery();
    }
}

删除

using (var conn = new sqlconnection("server=.;integrated security=true"))
{
    conn.open();
    using (var cmd = new sqlcommand("delete [adventureworks2016ctp3].[person].[addresstype] where name = @name", conn))
    {
        cmd.parameters.addwithvalue("@name", "test2");
        cmd.executenonquery();
    }
}

存储过程

using (var conn = new sqlconnection("server=.;integrated security=true"))
{
    conn.open();
    using (var cmd = new sqlcommand("[adventureworks2016ctp3].[dbo].[uspgetemployeemanagers]", conn))
    {
        cmd.commandtype = commandtype.storedprocedure;
        cmd.parameters.addwithvalue("@businessentityid", 10);
        using (var reader = cmd.executereader())
        {
            while (reader.read())
            {
                console.writeline(reader["firstname"]);
            }
        }
    }
}

视图

使用上与普通的数据表没有差别。

using (var conn = new sqlconnection("server=.;integrated security=true"))
{
    conn.open();
    using (var cmd = new sqlcommand("select top 10 * from [adventureworks2016ctp3].[humanresources].[vemployee]", conn))
    {
        using (var reader = cmd.executereader())
        {
            while (reader.read())
            {
                console.writeline(reader["firstname"]);
            }
        }
    }
}

以上代码例子里的数据库使用的是adventureworks databases and scripts for sql server 2016 ctp3