腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
腾讯云图片鉴黄集成到C#
官方文档:https://cloud.tencent.com/document/product/641/12422
请求官方API及签名的生成代码如下:
public class TencentCloundPicHelper
{
/// <summary>
/// 发送Post请求腾讯云
/// </summary>
public string SendPost(string postDataStr)
{
var url = @"http://service.image.myqcloud.com/detection/porn_detect";
try
{
System.Net.ServicePointManager.Expect100Continue = false;
var request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
SetHeaderValue(request.Headers, "content-type", "application/json");
SetHeaderValue(request.Headers, "content-length", postDataStr.Length.ToString());
SetHeaderValue(request.Headers, "Host", "service.image.myqcloud.com");
SetHeaderValue(request.Headers, "authorization", GetSign());
var memStream = new MemoryStream();
var jsonByte = Encoding.GetEncoding("utf-8").GetBytes(postDataStr);
memStream.Write(jsonByte, 0, jsonByte.Length);
request.ContentLength = memStream.Length;
var requestStream = request.GetRequestStream();
memStream.Position = 0;
var tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close();
var response = request.GetResponse();
using (var s = response.GetResponseStream())
{
var reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException we)
{
if (we.Status == WebExceptionStatus.ProtocolError)
{
using (var s = we.Response.GetResponseStream())
{
var reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
else
{
throw we;
}
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// 获取签名
/// </summary>
public static string GetSign()
{
var appId = ConfigurationManager.AppSettings["AppId"];//开发者的 APPID,接入智能图像时由系统生成
var bucket = "tengxunyun";//Bucket,空间名称,即图片资源的组织管理单元
var secretId = ConfigurationManager.AppSettings["SecretId"];//Secret ID
var secretKey = ConfigurationManager.AppSettings["SecretKey"];//secretKey
var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
var currentTime = Convert.ToInt64(ts.TotalSeconds);//当前时间戳,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒,多次签名时,e 应大于 t
var expiredTime = Convert.ToInt64((DateTime.UtcNow.AddMinutes(180) - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);//签名的有效期,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒;单次签名时,e 必须设置为 0
var rand = GetRandom();//随机串,无符号 10 进制整数,用户需自行生成,最长 10 位
var userid = 0;//历史遗留字段,请填写为 0
var fileid = "";//资源存储的唯一标识,单次签名必填;多次签名选填,如填写则会验证与当前操作的文件路径是否一致。
var encryptText = $"a={appId}&b={bucket}&k={secretId}&e={expiredTime}&t={currentTime}&r={rand}&u=0&f=";
var sign = Hmacsha1Encrypt(encryptText, secretKey);
return sign;
}
/// <summary>
/// 设置Http post请求头
/// </summary>
public static void SetHeaderValue(WebHeaderCollection header, string name, string value)
{
var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
if (property != null)
{
var collection = property.GetValue(header, null) as NameValueCollection;
collection[name] = value;
}
}
/// <summary>
/// HMACSHA1算法加密
/// </summary>
private static string Hmacsha1Encrypt(string encryptText, string encryptKey)
{
using (HMACSHA1 mac = new HMACSHA1(Encoding.UTF8.GetBytes(encryptKey)))
{
var hash = mac.ComputeHash(Encoding.UTF8.GetBytes(encryptText));
var pText = Encoding.UTF8.GetBytes(encryptText);
var all = new byte[hash.Length + pText.Length];
Array.Copy(hash, 0, all, 0, hash.Length);
Array.Copy(pText, 0, all, hash.Length, pText.Length);
return Convert.ToBase64String(all);
}
}
/// <summary>
/// 获取随机数
/// </summary>
private static int GetRandom()
{
var random = new Random();
var rand = random.Next(10000, 999999999);
return rand;
}
}
SQL Server 怎么在分页获取数据的同时获取到总记录数
SQL Server 获取数据的总记录数,有两种方式:
1.先分页获取数据,然后再查询一遍数据库获取到总数量
2.使用count(1) over()获取总记录数量
SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY Id DESC) rn,
COUNT(1) OVER() AS TotalCount,
Id
FROM
dbo.T_User
)a
WHERE
a.rn BETWEEN 1 AND 5
第二种方式既分页还能获取到总记录数量。就是多一个字段,如果获取一次数据较多的话,会浪费一些流量。
如果使用第一种的话,会多访问一次数据库,增加一次数据连接的关闭和打开,会消耗数据库资源。
第二种方式还是我同事开始使用的,然后我们就这样使用了。
注意:目前发现只有sqlserver有,mysql没有这个效果,大家如果发现其他的可以使用,可以评论。3Q.
sqlserver 操作数据表语句模板
从网上搜的,一点一点加吧。
-----------设置事务全部回滚-----------------
SET XACT_ABORT ON
BEGIN
BEGIN TRY
BEGIN TRANSACTION TR
---------------------------------删除表=======================
--DROP TABLE T_QuestionBankItem
---=================================修改列名========================================
--exec sp_rename 'T_MyCourse.CourseClassId' , 'ClassId', 'column'
-----==========================修改字段类型及默认值------------------
--ALTER TABLE T_Message ALTER COLUMN Title nvarchar(20) NOT NULL
--===========================增加列======================================----
----------------T_AssNews-------------
--alter table T_AssNews ADD ViewCount int NOT NULL Default 0
--EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'浏览量' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'T_AssNews', @level2type=N'COLUMN',@level2name=N'ViewCount'
-----------删除字段、先删除约束
--ALTER TABLE [dbo].[T_TICategory] DROP CONSTRAINT [DF_T_TICategory_TrainingInstitutionId]
--ALTER TABLE T_TICategory DROP COLUMN TrainingInstitutionId
COMMIT TRANSACTION TR
END TRY
BEGIN CATCH
PRINT 'EXECUTED FAILED';
select error_number() as error_number ,
error_message() as error_message
ROLLBACK TRANSACTION TR
RETURN
END CATCH
END
.NET MVC后台发送post请求
一、WebRequest方式
//设置请求接口
var request = (HttpWebRequest)WebRequest.Create("http://xxx.com/xxx");
//请求参数
var postData = string.Format("appId={0}&appScreat={1}&channel={2}", appId, appScreat, channel);
var data = Encoding.ASCII.GetBytes(postData);
//请求方式
request.Method = "POST";
//请求头参数设置
request.Headers.Add("sign", sign);
request.Headers.Add("timestamp", timestamp);
request.Headers.Add("token", token);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
//结果返回
var response = (HttpWebResponse)request.GetResponse();
//转字符串
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
//转换为json对象
MXCZUserInfoResponse userInfoResponse = JsonConvert.DeserializeObject<MXCZUserInfoResponse>(responseString);





浙公网安备 33010602011771号