首页 > 其他分享 >Ado.NET练习

Ado.NET练习

时间:2023-11-12 21:06:34浏览次数:30  
标签:练习 cmd SqlConnection sda new Ado NET await conn

ADO.NET练习,主要包括 SqlConnection对象、SqlCommand对象、SqlDataReader对象、SqlDatAdapter对象、SqlTransaction事务、以及对应的数据查询、数据修改、数据添加、数据删除操作。

using Microsoft.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Net.Mail;
// See https://aka.ms/new-console-template for more information


//读取数据库连接字符串
string connStr = ConfigurationManager.ConnectionStrings["YidoConn"].ConnectionString;

//SqlConnection对象
/*SqlConnection对象
//构造函数实例化SqlConnection
SqlConnection sqlConnection = new SqlConnection(connStr);

//属性指定数据库连接字符串
//SqlConnection sqlConnection = new SqlConnection();
//sqlConnection.ConnectionString = connStr;

//打开数据库连接
sqlConnection.Open();
//关闭连接
sqlConnection.Close();
//异步打开数据库连接
await sqlConnection.OpenAsync();
//异步关闭数据库连接
await sqlConnection.CloseAsync();
*/

//SqlCommand对象
/*
using(SqlConnection conn = new SqlConnection(connStr))
{
    //打开数据库连接
    await conn.OpenAsync();
    //T-SQL语句
    string sql = "select * from Student";
    //实例化SqlCommand对象_构造函数实例化SqlCommand
    //SqlCommand sqlCmd = new SqlCommand(sql, conn);
    //使用属性实例化SqlCommand对象
    //SqlCommand sqlCmd = new SqlCommand();

    //CreateCommand()方法
    SqlCommand sqlCmd = conn.CreateCommand();

    sqlCmd.CommandText = sql; //指定SQL语句或存储过程
    sqlCmd.CommandType = System.Data.CommandType.Text;//命令类型是SQL语句
    //CommandType.StoredProcedure:指定要执行的是存储过程
    //CommandType.TableDirect:指定一个表明
    sqlCmd.Connection = conn; //指定SqlConnection对象

}
*/
//SqlDataReader对象
/*
using(SqlConnection sqlConn = new SqlConnection(connStr))
{
    //打开数据库连接
    //sqlConn.Open();
    //异步打开数据库连接
    await sqlConn.OpenAsync();
    //T-SQL语句
    string sql = "select * from Student";
    //创建SqlCommand对象
    SqlCommand cmd = sqlConn.CreateCommand();
    cmd.CommandText = sql;
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = sqlConn;

    //获取数据流
    //SqlDataReader sdr = cmd.ExecuteReader();
    //while (sdr.Read())
    //{
    //    Console.WriteLine("{0} {1} {2} {3}", sdr[0], sdr[1], sdr[2], sdr[3]);
    //}
    ////关闭数据流
    //sdr.Close();
    //异步方法
    SqlDataReader sdr = await cmd.ExecuteReaderAsync();
    //while (await sdr.ReadAsync())
    //{
    //    Console.WriteLine("{0} {1} {2} {3}", sdr[0], sdr[1], sdr[2], sdr[3]);
    //}

    //SqlDataReader方法
    //GetOrdinal()方法可以根据表中指定的列名(字段名)得到对应的索引值。索引值从0开始
    while (await sdr.ReadAsync())
    {
        Console.WriteLine(sdr.GetOrdinal("SId"));
    }
    //GetName()方法根据索引值得到对应的列名

    await sdr.CloseAsync();
}
*/


//SqlParameter对象
/*
 * Add()方法:将单个的SqlParameter对象添加到集合中
 * AddRange():将SqlParameter类型的数组添加到集合中
 * AddWithValue():将参数名称和对应的值添加到集合中

using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    string sql = "Select * from Student where SName like '%'+@name+'%' AND Sage>@age";
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = sql;
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = conn;

    //Add()方法添加参数
    ////配置参数
    //SqlParameter sqlParameter1 = new SqlParameter("@name", System.Data.SqlDbType.NVarChar);
    //SqlParameter sqlParameter2 = new SqlParameter("@age", System.Data.SqlDbType.Int);
    ////将参数添加到集合中
    //cmd.Parameters.Add(sqlParameter1);
    //cmd.Parameters.Add(sqlParameter2);
    ////给参数赋值
    //cmd.Parameters["@name"].Value = "大";
    //cmd.Parameters["@age"].Value = 21;

    //AddRange()方法添加参数
    //定义参数数组
    //SqlParameter[] sqlParameters =
    //{
    //    new SqlParameter("@name", System.Data.SqlDbType.NVarChar),
    //    new SqlParameter("@age", System.Data.SqlDbType.Int)
    //};
    ////将参数添加到集合中
    //cmd.Parameters.Add(sqlParameters);
    ////给参数赋值
    //cmd.Parameters["@name"].Value = "大";
    //cmd.Parameters["@age"].Value = 21;


    //AddWithValue()添加参数
    //直接添加参数并赋值
    cmd.Parameters.AddWithValue("@name", "大");
    cmd.Parameters.AddWithValue("@age", 21);



    //获取数据流
    SqlDataReader sdr = await cmd.ExecuteReaderAsync();
    while(await sdr.ReadAsync())
    {
        Console.WriteLine($"姓名= {await sdr.GetFieldValueAsync<string>(1)}, 年龄={await sdr.GetFieldValueAsync<int>(2)}");
    }
    await sdr.CloseAsync();

}
 */

//添加数据
/*
 * 

using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    string sql = "INSERT into Student(Sname,SAge,SSex) VALUES(@name,@age,@sex)";
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = sql;
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = conn;

    //添加参数
    SqlParameter[] sqlParameters =
    {
        new SqlParameter("@name", System.Data.SqlDbType.NVarChar),
        new SqlParameter("@age", System.Data.SqlDbType.Int),
        new SqlParameter("@sex", System.Data.SqlDbType.Bit)
    };
    //将参数添加到集合
    cmd.Parameters.AddRange(sqlParameters);
    //给参数赋值
    cmd.Parameters[0].Value = "刘墉";
    cmd.Parameters[1].Value = 85;
    cmd.Parameters[2].Value = 1;

    //执行添加
    int count = await cmd.ExecuteNonQueryAsync();
    if(count > 0)
    {
        Console.WriteLine("添加成功!");
    }
}
 */

//更新数据
/*
 * 

using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    string sql = "Update Student set SAge = @age where SId = @id";

    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = sql;
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = conn;

    //添加参数
    SqlParameter[] sqlParameters =
    {
        new SqlParameter("@age", System.Data.SqlDbType.Int),
        new SqlParameter("@id", System.Data.SqlDbType.Int)
    };
    //将参数添加到集合
    cmd.Parameters.AddRange(sqlParameters);
    //给参数赋值
    cmd.Parameters[0].Value = 29;
    cmd.Parameters[1].Value = 4;

    //执行更新
    int count = await cmd.ExecuteNonQueryAsync();
    if(count > 0)
    {
        Console.WriteLine("更新成功!");
    }

}
 */
//删除数据
/*
 * 

using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    string sql = "delete from Student where Sid= @id";

    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = sql;
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = conn;

    SqlParameter[] sqlParameters =
    {
        new SqlParameter("@id", System.Data.SqlDbType.Int)
    };
    cmd.Parameters.AddRange(sqlParameters);
    cmd.Parameters[0].Value = 4;

    int count = await cmd.ExecuteNonQueryAsync();
    if(count > 0)
    {
        Console.WriteLine("删除成功!");
    }
}
 */

//查询数据
/*
 * 

using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    string sql = "select * from Student where SName like '%' + @name + '%' and SAge > @age";
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = sql;
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = conn;

    SqlParameter[] sqlParameters =
    {
        new SqlParameter("@name", System.Data.SqlDbType.NVarChar),
        new SqlParameter("@age", System.Data.SqlDbType.Int)
    };
    cmd.Parameters.AddRange(sqlParameters);
    cmd.Parameters[0].Value = "大";
    cmd.Parameters[1].Value = 18;

    //查询数据
    SqlDataReader sdr = await cmd.ExecuteReaderAsync();
    while(await sdr.ReadAsync())
    {
        Console.WriteLine($"姓名:{sdr["SName"]}, 年龄:{sdr["SAge"]}");
    }
    await conn.CloseAsync();
}
 */

//SqlDataAdapter对象
/*
using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    string sql = "select * from Student";
    ////实例化SqlDataAdapter对象,无参数
    //SqlDataAdapter sda = new SqlDataAdapter();
    //指定SelectCommand,包括T-SQL语句和SqlConnection对象
    //sda.SelectCommand = new SqlCommand(sql, conn);
    //实例化SqlCommand对象
    SqlCommand cmd = new SqlCommand(sql, conn);
    //实例化SqlDataAdapter,将SqlCommand对象传入
    SqlDataAdapter sda = new SqlDataAdapter(cmd);

    //实例化DataSet数据集对象
    DataSet sd = new DataSet();

    //也可以直接填充到DataTable对象中
    //DataTable dataTable = new DataTable();
    //填充到DataSet对象中
    sda.Fill(sd);
    //填充到DataTable对象中
    //sda.Fill(dataTable);
    //如果填充DataSet,获取DataTable对象取DataSet中第一个DataTable
    DataTable dt = sd.Tables[0];

    //获取数据
    foreach(DataRow row in dt.Rows)
    {
        Console.WriteLine($"{row["SId"]},{row["SName"]},{row["SAge"]},{row["SSex"]}");
    }
}
*/

//离线添加数据
/*
string sql = "select * from Student";
//实例化SqlDataAdapter对象,将T-SQL语句和数据库连接字符串传入
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
//InsertCommand表示插入数据
sda.InsertCommand = new SqlCommandBuilder(sda).GetInsertCommand();
DataTable dt = new DataTable();
sda.Fill(dt);
//添加一行数据
DataRow dr = dt.NewRow();
//给列赋值
dr["SName"] = "王蓉";
dr["SAge"] = 23;
dr["SSex"] = 0;
//将新行添加到表中
dt.Rows.Add(dr);
//更新到数据库中
int count = sda.Update(dt);
if(count > 0)
{
    Console.WriteLine("插入数据成功.");
}
*/

//离线更新数据
/*

string sql = "select * from Student";
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
sda.UpdateCommand = new SqlCommandBuilder(sda).GetUpdateCommand();
DataTable dataTable = new DataTable();
sda.Fill(dataTable);

foreach (DataRow row in dataTable.Rows)
{
    if (Convert.ToInt32(row["Sid"]) == 5)
    {
        row.BeginEdit();//开始编辑
        row["SName"] = "李小璐";
        row["SAge"] = 58;
        row["SSex"] = 0;
        row.EndEdit(); //结束编辑
    }
}
//更新到数据库中
int count = sda.Update(dataTable);
if(count > 0)
{
    Console.WriteLine("更新成功!");
}
 */

//离线删除数据
/*

string sql = "select * from Student";
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
sda.DeleteCommand = new SqlCommandBuilder(sda).GetDeleteCommand();

DataTable dataTable = new DataTable();
sda.Fill(dataTable);
foreach (DataRow row in dataTable.Rows)
{
    if (Convert.ToInt32(row["SId"]) == 5)
    {
        //删除行
        row.Delete();
        break;
    }
}
//更新到数据库中
int count = sda.Update(dataTable);
if (count > 0)
{
    Console.WriteLine("删除成功!");
}
 */
//离线混合操作
/*
string sql = "select * from Student";
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
sda.InsertCommand = new SqlCommandBuilder(sda).GetInsertCommand();
sda.UpdateCommand = new SqlCommandBuilder(sda).GetUpdateCommand();
sda.DeleteCommand = new SqlCommandBuilder(sda).GetDeleteCommand();
DataTable dt = new DataTable();
sda.Fill(dt);

//插入操作
DataRow dr = dt.NewRow();
dr[1] = "王宝强";
dr[2] = 38;
dr[3] = 1;
dt.Rows.Add(dr);

//更新操作
dr = dt.Rows[0];
dr["SName"] = "刘天王";

//删除操作
dr = dt.Rows[3];
dr.Delete();

//更新到数据库中
int count = sda.Update(dt);
if(count > 0)
{
    Console.WriteLine("操作成功!");
}
*/

//SqlTransaction对象-事务
/*
using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    SqlCommand sqlCmd= conn.CreateCommand();
    SqlTransaction sqlTrain;
    //开始事务
    sqlTrain = conn.BeginTransaction();
    sqlCmd.Connection = conn; //数据库连接
    sqlCmd.Transaction = sqlTrain;//指定事务

    try
    {
        sqlCmd.CommandText = "Insert into Student(SName,SAge,SSex) values('光宇',11,1)";
        sqlCmd.ExecuteNonQuery();//执行T-sql语句
        sqlCmd.CommandText = "Insert into Student(SName,SAge,SSex) values('赵云','gaga',1)";
        sqlCmd.ExecuteNonQuery();
        sqlTrain.Commit(); //提交事务
        Console.WriteLine("两条数据100%的添加到数据库中了");
    }
    catch (Exception ex)
    {

        Console.WriteLine($"发生了错误: {ex.Message}");
        //回滚事务
        sqlTrain.Rollback();
    }
}
*/

//存储过程
//存储过程添加数据
using(SqlConnection conn = new SqlConnection(connStr))
{
    await conn.OpenAsync();
    SqlCommand cmd = conn.CreateCommand();
    //cmd.CommandText = "AddDataToStudent";
    cmd.CommandText = "UpdateDataToStudent";
    cmd.CommandType = CommandType.StoredProcedure;

    //将参数添加到集合
    SqlParameter[] sqlParameters =
    {
        new SqlParameter("@name", SqlDbType.VarChar,20),
        new SqlParameter("@age", SqlDbType.Int, 4),
        new SqlParameter("@sex", SqlDbType.Bit,1),
        new SqlParameter("@id", SqlDbType.Int, 4)
    };
    cmd.Parameters.AddRange(sqlParameters);
    cmd.Parameters[0].Value = "董胖子";
    cmd.Parameters[1].Value = 34;
    cmd.Parameters[2].Value = 0;
    cmd.Parameters[3].Value = 1;
    //执行存储过程
    int count = await cmd.ExecuteNonQueryAsync();
    if (count > 0)
    {
        Console.WriteLine("添加成功!");
    }
}

Console.ReadKey();

对应数据库和存储过程

CREATE DATABASE AdoToMssqlDb;
GO

USE AdoToMssqlDb;
GO

CREATE TABLE Student
(
	Sid INT IDENTITY(1,1) PRIMARY KEY not null,
	SName NVARCHAR(20) NOT NULL,
	SAge INT NOT NULL,
	SSex BIT NOT NULL
)
GO

--添加数据
INSERT INTO Student(SName,SAge,SSex)VALUES('张大大',22,1)
INSERT INTO Student(SName,SAge,SSex)VALUES('吴英',18,0)
INSERT INTO Student(SName,SAge,SSex)VALUES('李世民',49,1)
GO

SELECT * FROM Student;

--创建存储过程


USE AdoToMssqlDb
GO

--添加数据存储过程
CREATE PROCEDURE AddDataToStudent
@name nvarchar(20),
@age int,
@sex bit
AS
BEGIN
	INSERT INTO Student([SName],[SAge],[SSex]) VALUES(@name,@age,@sex)
END
GO
--更新数据存储过程
CREATE PROCEDURE UpdateDataToStudent
@id int,
@name nvarchar(20),
@age int,
@sex bit
AS
BEGIN
	UPDATE Student SET SName=@name,SAge=@age,SSex=@sex WHERE SId = @id
END
GO

--删除数据存储过程
CREATE PROCEDURE DelDataToStudent
@id int
AS 
BEGIN
	DELETE FROM Student WHERE Sid = @id
END
GO

--查询数据
CREATE PROCEDURE SELECTDataToStudent
@keyword nvarchar(20)
AS
BEGIN
	SELECT * FROM Student WHERE SName LIKE '%' + @keyword +'%'
END
GO

标签:练习,cmd,SqlConnection,sda,new,Ado,NET,await,conn
From: https://blog.51cto.com/sunproblem/8330702

相关文章

  • TypeScript版的吴恩达的机器学习课程练习-2
    这几天看完了逻辑回归相关的课程,听着的时候感觉还算顺利,但是在进行课程练习的过程中还是花费了较长的时间,因为我画出的图形和实际出题题目后面的图形有点不太一样,所以来来回回不断地调整参数。后面才发现和学习速度α以及梯度下降次数有很大的关系。模型实现具体的模型推到就不说了......
  • 龙芯发布 .NET 8 SDK 8.0.100-rc2 LoongArch64
    随着.NET8的发布的临近,国内的社区朋友们也很关心龙芯.NET团队对于Loongarch.NET8的发布时间,目前从龙芯.NET编译器团队的可靠信息,Loongarch.NET8的发布会在2023年11月14日正式发布后也会发布,从龙芯2019年启动.NET的研发工作,2022年完成了LoongArch64架构代码合并到.NET社区......
  • 11月12日基础的网页设计以及阴影的设计box-shadow属性
    目录基础的网页设计html的代码css的代码阴影效果添加基础的网页设计html的代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>今天网页</title><linkrel="stylesheet"href="样式.css"......
  • 剖析网络测量:Counting and Measuring Network Traffic
    全文共18000字,讲解了网络测量和计数中的多方面知识:网络测量的意义、网络测量的手段分类、网络测量在实现上的挑战、以及解决这些挑战所用到的技术和协同方案等等。参考书籍有:《NetworkAlgorithmics:AnInterdisciplinaryApproachtoDesigningFastNetworkedDevices(2ndE......
  • 11月12日基础的网页设计以及阴影的设计box-shadow属性
    目录基础的网页设计html的代码css的代码基础的网页设计html的代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>今天网页</title><linkrel="stylesheet"href="样式.css">&......
  • 在net core 6中如何配置oauth2.0
    在.NETCore6中配置OAuth2.0可以通过使用Microsoft.AspNetCore.Authentication.OAuth包来实现。以下是一个简单的示例,演示了如何在.NETCore6中配置OAuth2.0来与GitHub进行集成:首先,安装Microsoft.AspNetCore.Authentication.OAuth包:```bashdotnetaddpackageMicrosoft.AspN......
  • .Net进阶(5)使用Fody实现 .NET的静态编织
    序言 广义的面向切面编程,有静态编织和动态代理两种形式,它们都可以在某个方法执行前后插入某种处理逻辑。不同的地方在于,前者发生在编译时期间,后者发生在运行时期间。对于.NET而言,最常见的静态编织方案是 PostSharp 和 Mono.Cecil,两者的区别是:一个付费、一个免费。本文介......
  • net core自带的缓存机制
    .NETCore的缓存机制主要有以下几种:1.内存缓存(In-MemoryCache):这是最简单的缓存形式,它将缓存数据存储在应用程序的内存中。这种缓存方式非常快速,但是如果应用程序重启或者服务器发生故障,缓存数据将会丢失。2.分布式缓存(DistributedCache):这种缓存方式可以在多个服务器之间共享......
  • [护网杯 2018]easy_tornado 1(两种解法!)
    题目环境:<br/><br/>发现有三个txt文本文件/flag.txt<br/>/welcome.txt<br/>/hints.txt依此点开<br/>flag在/fllllllllllllag文件中<br/>在hints.txt文件中发现md5计算md5(cookie_secret+md5(filename))并且三个文件中都存在filehash(文件名被哈希算法加密32位小......
  • 人脸识别facenet-pytorch/Yolov5
    facenet-pytorch篇importcv2fromPILimportImageimportosfromfacenet_pytorchimportMTCNNfromtorchvision.transformsimportToPILImagefolder_path=r'E:\Code\Python\QQh5\sourceLib'output_folder=r'testPersonFace'#如果输出文件......