ASP.NET两个关联的表的增删查改
两个关联的表的增删查改
主要用了参数 SqlParameter,事务执行多条sql
表Users
ID int
Name varchar
表UsersDetail
ID int
UserId int (对应表Users的ID)
Phone varchar
Address varchar
----------------------------------------------------------------------------------------------
Web.Config
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=local;Initial Catalog=Test;User ID=sa;Password="
providerName="System.Data.SqlClient" />
</connectionStrings>
----------------------------------------------------------------------------------------------
AppCode/DataBase.cs
view plaincopy to clipboardprint?
using System;
using System.Collections;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
/// <summary>
/// 用于数据访问的类
/// </summary>
public class DataBase:IDisposable
{
protected SqlConnection Connection;
protected String ConnectionString;
public DataBase()
{
ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}
~DataBase()
{
try
{
if (Connection != null)
Connection.Close();
}
catch { }
try
{
Dispose();
}
catch { }
}
protected void Open()
{
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
}
if (Connection.State.Equals(ConnectionState.Closed))
{
Connection.Open();
}
}
public void Close()
{
if (Connection != null)
Connection.Close();
}
public void Dispose()
{
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, object Value)
{
SqlParameter Param;
if (Size > 0)
Param = new SqlParameter(ParamName, DbType, Size);
else Param = new SqlParameter(ParamName, DbType);
if (Value != null)
Param.Value = Value;
return Param;
}
public DataSet GetDataSet(String SqlString, SqlParameter[] param)
{
Open();
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}
public DataTable GetDataTable(String SqlString, SqlParameter[] param)
{
DataSet dataset = GetDataSet(SqlString, param);
dataset.CaseSensitive = false;
return dataset.Tables[0];
}
public int ExecuteSQL(string SqlString, SqlParameter[] param)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
return cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
Close();
}
}
public int ExecuteSQL(String[] SqlStrings, SqlParameter[][] param)
{
int count = -1;
Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = Connection.BeginTransaction();
cmd.Connection = Connection;
cmd.Transaction = trans;
try
{
int i = 0;
foreach (String str in SqlStrings)
{
cmd.CommandText = str;
cmd.Parameters.AddRange(param[i]);
count = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
i++;
}
trans.Commit();
}
catch
{
trans.Rollback();
count = -1;
}
finally
{
Close();
}
return count;
}
public SqlDataReader ExecuteReader(String SqlString, SqlParameter[] param)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
SqlDataReader myReader = cmd.ExecuteReader();
return myReader;
}
catch (Exception e)
{
throw e;
}
}
public int ExecuteScalar(string SqlString, SqlParameter[] param)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
object o = cmd.ExecuteScalar();
return int.Parse(o.ToString());
}
catch (Exception e)
{
throw e;
}
}
}
using System;
using System.Collections;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
/// <summary>
/// 用于数据访问的类
/// </summary>
public class DataBase:IDisposable
{
protected SqlConnection Connection;
protected String ConnectionString;
public DataBase()
{
ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}
~DataBase()
{
try
{
if (Connection != null)
Connection.Close();
}
catch { }
try
{
Dispose();
}
catch { }
}
protected void Open()
{
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
}
if (Connection.State.Equals(ConnectionState.Closed))
{
Connection.Open();
}
}
public void Close()
{
if (Connection != null)
Connection.Close();
}
public void Dispose()
{
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, object Value)
{
SqlParameter Param;
if (Size > 0)
Param = new SqlParameter(ParamName, DbType, Size);
else Param = new SqlParameter(ParamName, DbType);
if (Value != null)
Param.Value = Value;
return Param;
}
public DataSet GetDataSet(String SqlString, SqlParameter[] param)
{
Open();
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}
public DataTable GetDataTable(String SqlString, SqlParameter[] param)
{
DataSet dataset = GetDataSet(SqlString, param);
dataset.CaseSensitive = false;
return dataset.Tables[0];
}
public int ExecuteSQL(string SqlString, SqlParameter[] param)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
return cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
Close();
}
}
public int ExecuteSQL(String[] SqlStrings, SqlParameter[][] param)
{
int count = -1;
Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = Connection.BeginTransaction();
cmd.Connection = Connection;
cmd.Transaction = trans;
try
{
int i = 0;
foreach (String str in SqlStrings)
{
cmd.CommandText = str;
cmd.Parameters.AddRange(param[i]);
count = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
i++;
}
trans.Commit();
}
catch
{
trans.Rollback();
count = -1;
}
finally
{
Close();
}
return count;
}
public SqlDataReader ExecuteReader(String SqlString, SqlParameter[] param)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
SqlDataReader myReader = cmd.ExecuteReader();
return myReader;
}
catch (Exception e)
{
throw e;
}
}
public int ExecuteScalar(string SqlString, SqlParameter[] param)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
if (param != null)
{
cmd.Parameters.AddRange(param);
}
object o = cmd.ExecuteScalar();
return int.Parse(o.ToString());
}
catch (Exception e)
{
throw e;
}
}
}
----------------------------------------------------------------------------------------------
Default3.aspx
view plaincopy to clipboardprint?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<mce:script type="text/javascript" language="javascript"><!--
function DoCheck()
{
var inputs = document.getElementById("mytable").getElementsByTagName("input");
for (var i=0; i < inputs.length; i++)
if (inputs[i].type == 'checkbox')
{
inputs[i].checked = document.getElementById("chkall").checked;
}
}
// --></mce:script>
<mce:style type="text/css"><!--
#mytable { padding: 0; margin: 0; border-collapse:collapse;}
td { border: 1px solid #C1DAD7; background: #fff; font-size:12px; padding: 6px 6px 6px 12px; color: #4f6b72;}
td.alt { background: #F5FAFA; color: #797268;}
--></mce:style><style type="text/css" mce_bogus="1"> #mytable { padding: 0; margin: 0; border-collapse:collapse;}
td { border: 1px solid #C1DAD7; background: #fff; font-size:12px; padding: 6px 6px 6px 12px; color: #4f6b72;}
td.alt { background: #F5FAFA; color: #797268;}
</style>
</head>
<body>
<form id="form1" runat="server">
姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:HiddenField runat="server" ID="hfIDEdit" />
<br />
电话:<asp:TextBox ID="txtPhone" runat="server"></asp:TextBox><br />
地址:<asp:TextBox ID="txtAddress" runat="server"></asp:TextBox><br />
<asp:Button ID="btnAdd" runat="server" Text="添加" OnClick="btnAdd_Click" />
<asp:Label ID="lblMsg" runat="server" Text=""></asp:Label><br />
==================================================================<br />
输入姓名:<asp:TextBox ID="txtSearchName" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="搜索" OnClick="btnSearch_Click" />
<asp:Repeater runat="server" ID="rptUsers" OnItemCommand="rptUsers_ItemCommand" >
<HeaderTemplate>
<table width="500" id="mytable" cellspacing="0">
<tr>
<td class="alt"></td>
<td class="alt"> ID</td>
<td class="alt">姓名</td>
<td class="alt"> 电话</td>
<td class="alt">地址</td>
<td class="alt"></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td> <asp:CheckBox ID="chkDel" runat="server" /> </td>
<td>
<%#Eval("ID") %>
<asp:HiddenField runat="server" ID="hfID" Value='<%#Eval("ID") %>' />
<asp:HiddenField runat="server" ID="hfName" Value='<%#Eval("Name") %>' />
<asp:HiddenField runat="server" ID="hfPhone" Value='<%#Eval("Phone") %>' />
<asp:HiddenField runat="server" ID="hfAddress" Value='<%#Eval("Address") %>' />
</td>
<td>
<%#Eval("Name") %>
</td>
<td>
<%#Eval("Phone") %>
</td>
<td>
<%#Eval("Address") %>
</td>
<td>
<asp:LinkButton ID="BtnEdit" CommandName="btnEdit" runat="server">编辑</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<input type="checkbox" id="chkall" name="chkall" value="on" οnclick="DoCheck();">全选
<asp:Button runat="server" ID="btnDel" Text="删除" OnClick="btnDel_Click" />
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<mce:script type="text/javascript" language="javascript"><!--
function DoCheck()
{
var inputs = document.getElementById("mytable").getElementsByTagName("input");
for (var i=0; i < inputs.length; i++)
if (inputs[i].type == 'checkbox')
{
inputs[i].checked = document.getElementById("chkall").checked;
}
}
// --></mce:script>
<mce:style type="text/css"><!--
#mytable { padding: 0; margin: 0; border-collapse:collapse;}
td { border: 1px solid #C1DAD7; background: #fff; font-size:12px; padding: 6px 6px 6px 12px; color: #4f6b72;}
td.alt { background: #F5FAFA; color: #797268;}
--></mce:style><style type="text/css" mce_bogus="1"> #mytable { padding: 0; margin: 0; border-collapse:collapse;}
td { border: 1px solid #C1DAD7; background: #fff; font-size:12px; padding: 6px 6px 6px 12px; color: #4f6b72;}
td.alt { background: #F5FAFA; color: #797268;}
</style>
</head>
<body>
<form id="form1" runat="server">
姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:HiddenField runat="server" ID="hfIDEdit" />
<br />
电话:<asp:TextBox ID="txtPhone" runat="server"></asp:TextBox><br />
地址:<asp:TextBox ID="txtAddress" runat="server"></asp:TextBox><br />
<asp:Button ID="btnAdd" runat="server" Text="添加" OnClick="btnAdd_Click" />
<asp:Label ID="lblMsg" runat="server" Text=""></asp:Label><br />
==================================================================<br />
输入姓名:<asp:TextBox ID="txtSearchName" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="搜索" OnClick="btnSearch_Click" />
<asp:Repeater runat="server" ID="rptUsers" OnItemCommand="rptUsers_ItemCommand" >
<HeaderTemplate>
<table width="500" id="mytable" cellspacing="0">
<tr>
<td class="alt"></td>
<td class="alt"> ID</td>
<td class="alt">姓名</td>
<td class="alt"> 电话</td>
<td class="alt">地址</td>
<td class="alt"></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td> <asp:CheckBox ID="chkDel" runat="server" /> </td>
<td>
<%#Eval("ID") %>
<asp:HiddenField runat="server" ID="hfID" Value='<%#Eval("ID") %>' />
<asp:HiddenField runat="server" ID="hfName" Value='<%#Eval("Name") %>' />
<asp:HiddenField runat="server" ID="hfPhone" Value='<%#Eval("Phone") %>' />
<asp:HiddenField runat="server" ID="hfAddress" Value='<%#Eval("Address") %>' />
</td>
<td>
<%#Eval("Name") %>
</td>
<td>
<%#Eval("Phone") %>
</td>
<td>
<%#Eval("Address") %>
</td>
<td>
<asp:LinkButton ID="BtnEdit" CommandName="btnEdit" runat="server">编辑</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<input type="checkbox" id="chkall" name="chkall" value="on" οnclick="DoCheck();">全选
<asp:Button runat="server" ID="btnDel" Text="删除" OnClick="btnDel_Click" />
</form>
</body>
</html>
----------------------------------------------------------------------------------------------
Default3.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
btnDel.Attributes.Add("onclick", "return confirm('确定进行删除操作吗?');");
BindGV();
}
}
void BindGV()
{
DataBase db = new DataBase();
DataSet ds = db.GetDataSet("select * from Users a inner join UsersDetail b on a.ID=b.UserId", null);
rptUsers.DataSource = ds;
rptUsers.DataBind();
}
protected void btnAdd_Click(object sender, EventArgs e)
{
DataBase db = new DataBase();
if (btnAdd.Text == "添加")
{
SqlParameter[] Params = new SqlParameter[1];
Params[0] = db.MakeParam("@Name", SqlDbType.VarChar, 20, txtName.Text);
string sql = "insert into Users(Name) values(@Name);select @@identity;";
int UserId = db.ExecuteScalar(sql, Params);
SqlParameter[] Params2 = new SqlParameter[3];
Params2[0] = db.MakeParam("@UserId", SqlDbType.Int, 4, UserId);
Params2[1] = db.MakeParam("@Phone", SqlDbType.VarChar, 20, txtPhone.Text);
Params2[2] = db.MakeParam("@Address", SqlDbType.VarChar, 50, txtAddress.Text);
string sql2 = "insert into UsersDetail(UserId,Phone,Address) values(@UserId,@Phone,@Address)";
if (db.ExecuteSQL(sql2, Params2) > 0)
{
lblMsg.Text = "信息添加成功!";
BindGV();
}
else
{
lblMsg.Text = "信息添加失败!";
}
}
else
{
SqlParameter[][] Params = new SqlParameter[2][];
SqlParameter[] Params1 = new SqlParameter[2];
Params1[0] = db.MakeParam("@ID", SqlDbType.Int, 4, int.Parse(hfIDEdit.Value));
Params1[1] = db.MakeParam("@Name", SqlDbType.VarChar, 20, txtName.Text);
SqlParameter[] Params2 = new SqlParameter[3];
Params2[0] = db.MakeParam("@UserId", SqlDbType.Int, 4, int.Parse(hfIDEdit.Value));
Params2[1] = db.MakeParam("@Phone", SqlDbType.VarChar, 20, txtPhone.Text);
Params2[2] = db.MakeParam("@Address", SqlDbType.VarChar, 50, txtAddress.Text);
Params[0] = Params1;
Params[1] = Params2;
string sql1 = "update Users set Name=@Name where ID=@ID";
string sql2 = "update UsersDetail set Phone=@Phone,Address=@Address where UserId=@UserId";
string[] sql = { sql1, sql2 };
if (db.ExecuteSQL(sql, Params) > 0)
{
lblMsg.Text = "信息修改成功!";
txtName.Text = txtPhone.Text = txtAddress.Text = "";
btnAdd.Text = "添加";
BindGV();
}
else
{
lblMsg.Text = "信息修改失败!";
}
}
}
protected void btnSearch_Click(object sender, EventArgs e)
{
DataBase db = new DataBase();
SqlParameter[] Params = new SqlParameter[1];
Params[0] = db.MakeParam("@Name", SqlDbType.VarChar, 20, txtSearchName.Text);
string sql = "select * from Users a inner join UsersDetail b on a.ID=b.UserId where a.Name=@Name";
DataSet ds = db.GetDataSet(sql, Params);
rptUsers.DataSource = ds;
rptUsers.DataBind();
}
protected void btnDel_Click(object sender, EventArgs e)
{
DataBase db = new DataBase();
int num = 0;
for (int i = 0; i < rptUsers.Items.Count; i++)
{
HiddenField hfID = (HiddenField)rptUsers.Items[i].FindControl("hfID");
CheckBox chkDel = (CheckBox)rptUsers.Items[i].FindControl("chkDel");
if (chkDel.Checked)
{
num++;
SqlParameter[][] Params = new SqlParameter[2][];
SqlParameter[] Params1 = new SqlParameter[1];
Params1[0] = db.MakeParam("@ID", SqlDbType.Int, 4, int.Parse(hfID.Value));
SqlParameter[] Params2 = new SqlParameter[1];
Params2[0] = db.MakeParam("@UserId", SqlDbType.Int, 4, int.Parse(hfID.Value));
Params[0] = Params1;
Params[1] = Params2;
string sql1 = "delete from Users where ID=@ID";
string sql2 = "delete from UsersDetail where UserId=@UserId";
string[] sql = { sql1, sql2 };
db.ExecuteSQL(sql, Params);
}
}
if (num > 0)
{
BindGV();
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "script", "alert('成功删除了!" + num + "条数据');", true);
}
else
{
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "script", "alert('没有选择数据!');", true);
}
}
protected void rptUsers_ItemCommand(object source, RepeaterCommandEventArgs e)
{
HiddenField hfID = (HiddenField)e.Item.FindControl("hfID");
HiddenField hfName = (HiddenField)e.Item.FindControl("hfName");
HiddenField hfPhone = (HiddenField)e.Item.FindControl("hfPhone");
HiddenField hfAddress = (HiddenField)e.Item.FindControl("hfAddress");
switch (e.CommandName)
{
case "btnEdit":
btnAdd.Text = "编辑";
hfIDEdit.Value = hfID.Value;
txtName.Text = hfName.Value;
txtPhone.Text = hfPhone.Value;
txtAddress.Text = hfAddress.Value;
break;
}
}
}
转载于:https://www.cnblogs.com/xiachufeng/archive/2010/07/28/1786682.html
ASP.NET两个关联的表的增删查改相关推荐
- python学习之flask sqlalchemy介绍和使用 表操作增删查改
flask sqlalchemy介绍和使用 表操作增删查改 内容详细 1 sqlalchemy介绍和快速使用 1.1 介绍 # SQLAlchemy是一个基于Python实现的ORM框架# djang ...
- mysql表的增删查改
mysql3 表的增删查改 增 创建数据表 单行插入 多行插入 指定列插入 替换 查 select列 全列查询 指定列查询 表达式中可以包含一个字段 给输出的结果重命名 去除重复结果 where条件 ...
- MySQL:带你掌握表的增删查改
表的增删查改 Create 单行数据 + 全列插入 多行数据 + 指定列插入 插入否则更新 替换 Retrieve SELECT 列 WHERE 条件 结果排序 筛选分页结果 Update Delet ...
- MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔
文章目录 前文知识点回顾 正文 :对数据表进行"增删查改"操作 新增操作 - insert 关键字 查找语句(基础操作) - select关键字 - 重点!!!!!!!! 1.最基 ...
- 【MySQL】6.0 表的增删查改
英语单词 Create 创建 Retrieve 读取 Update 更新 Delete 删除 duplicate 复制 updata 更新数据 replace 替换 constraint 限制 cru ...
- 【TcaplusDB知识库】GO快速上手PB表的增删查改操作
PROTOBUF说明 PROTO表是基于PROTOBUF协议设计的TcaplusDB表,PROTOBUF协议是Google开源的通用RPC通信协议,用于TcaplusDB存储数据的序列化.反序列化等操 ...
- C++实现静态顺序表的增删查改以及初始化
C++实现静态顺序表的增删查改 顺序表:用一段地址连续的存储单元依s次存储数据元素的线性结构,是线性表的一种. //SeqList.h#pragma once#include <assert.h ...
- 【线性表】—动态顺序表的增删查改实现
小菜坤日常上传gitee代码:https://gitee.com/qi-dunyan(所有的原码都放在了我上面的gitee仓库里) 数据结构知识点存放在专栏[数据结构]后续会持续更新 ❤❤❤ 个人简介 ...
- 【数据结构】顺序表的增删查改 (C语言实现)
文章目录 一.线性表 二.顺序表 1.什么是顺序表 2.顺序表的分类 三.动态顺序表的实现 1.结构的定义 2.顺序表的初始化 3.检查容量 4.在头部插入数据 5.在尾部插入数据 6.在指定位置插入 ...
最新文章
- [zt] petshop4.0 详解之三
- Java泛型详解-史上讲解最详细的,没有之一
- C语言课程设计选哪个,C语言课程设计选题及要求.docx
- matplotlib 一张图多个图,如何在Matplotlib中绘制同一个图上的多个函数?
- java plug机制_插件机制 - OpooPress - 基于 Java 的静态博客生成器
- 系统接口对接的进度工作应该谁来干_协同OA办公系统的选型要谨慎!浅谈其具体缘由有哪些...
- 数字图像处理-频域滤波-高通/低通滤波
- Linux (x86) Exploit 开发系列教程之九 使用 unlink 的堆溢出
- abaqus推荐用哪一版本的_ABAQUS推荐资料合集(一)
- Web前端工作笔记002---json数据查询的方法_json查询大全,JsonSQL数据查询,jfunk数据查询
- oracle+快速客户端安装方法,ORACLE简易客户端安装与使用方法
- mysql转储表_Mysql导出表结构及表数据 mysqldump用法
- 录录录屏(video321)--1款亲测好用的免费高清录屏软件。你一定无法拒绝(附使用教程)
- 最长回文子串(Longest Palindromic Substring)——三种时间复杂度的解法及LeetCode[5] - 最长回文子串动态规划
- JAVA实现126邮箱发送及部署后发送邮箱报错问题
- 什么软件可以截取电视剧视频片段?这3款软件极易上手!
- 高德地图html js开发例子,vue.js高德地图实现热点图代码实例
- 印章工具怎么使用?如何制作专属印章?
- 辟谣:关于南航计算机考研的谣言
- 【深度学习笔记】神经网络模型及经典算法知识点问答巩固(算法工程师面试笔试)
热门文章
- android double精度_Android车辆运动轨迹平滑移动(高仿滴滴打车)最佳实践
- 面对复杂业务,if-else coder 如何升级?
- 从零入门 Serverless | SAE 场景下,应用流量的负载均衡及路由策略配置实践
- MATLAB中cfl,ML4835复合PFC/CFL小型荧光灯基于Matlab的电力电子电路仿真方法
- linux如何使用vim显示行号语法高亮,(.vimrc简单使用)
- jenkins pipeline python_【python3-4】Jenkins pipline集成参数自动化执行python脚本
- java List最大_在java中获取List集合中最大的日期时间操作
- php 使用sendgrid api 发送邮件_linux - 使用命令发送邮件
- 在浏览器中内嵌word_关于项目浏览器内核的选取解读
- rancher添加私有仓库_CocoaPods搭建私有库