博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经...
阅读量:7111 次
发布时间:2019-06-28

本文共 9804 字,大约阅读时间需要 32 分钟。

 

官方文档:

请求官方API及签名的生成代码如下:

public class TencentCloundPicHelper    {        ///         /// 发送Post请求腾讯云        ///         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;            }        }        ///         /// 获取签名        ///         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;        }        ///         /// 设置Http post请求头        ///         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;            }        }        ///         /// HMACSHA1算法加密        ///         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);            }        }        ///         /// 获取随机数        ///         private static int GetRandom()        {            var random = new Random();            var rand = random.Next(10000, 999999999);            return rand;        }    }

 

 

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    )aWHERE    a.rn BETWEEN 1 AND 5

第二种方式既分页还能获取到总记录数量。就是多一个字段,如果获取一次数据较多的话,会浪费一些流量。

如果使用第一种的话,会多访问一次数据库,增加一次数据连接的关闭和打开,会消耗数据库资源。

第二种方式还是我同事开始使用的,然后我们就这样使用了。

注意:目前发现只有sqlserver有,mysql没有这个效果,大家如果发现其他的可以使用,可以评论。3Q.

 

 

从网上搜的,一点一点加吧。

-----------设置事务全部回滚-----------------SET XACT_ABORT ONBEGINBEGIN  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 CATCHEND

 

 

一、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
(responseString);
 
 
 
 

 

  在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬同事(我是一只前端弱鸡),给我提供的思路,在百度api的回调函数里面再调一次自定义的回调函数,从而在自定义的函数里面进行判断所有地点是否都回调完成了。

  下面是具体代码,  

1 

 

  我实际情况是那个地址allAddress比较复杂,需要二次循环,不像上面例子这么简单,所以才使用的这种方法。

 

 

 

  这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后,

看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的,还有return中间执行的。遂做了一个小测试如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static 
void 
Main(
string
[] args)
 
{
      
//测试
     
Test();
     
System.Console.WriteLine(
"结束了"
);
     
System.Console.ReadLine();
 
}
 
 
/// <summary>
 
/// 测试
 
/// </summary>
 
/// <returns></returns>
 
private 
static 
int 
Test()
 
{
     
try
     
{
         
System.Console.WriteLine(
"好,开始了"
);
         
return 
ReturnInt();
     
}
     
catch 
(Exception exception)
     
{
         
System.Console.WriteLine(
"我是异常"
);
         
throw
;
     
}
     
finally
     
{
         
System.Console.WriteLine(
"我是finally"
);
     
}
 
}
 
/// <summary>
/// 返回数字
/// </summary>
/// <returns></returns>
 
private 
static 
int 
ReturnInt()
 
{
     
System.Console.WriteLine(
"我是return"
);
     
return 
1;
 
}

  测试结果如下:

  

  所以我觉得finally{}里面的code是在return之后执行的。

  此测试较粗糙,如有其它方法证明,望告知。

----------------------------------------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------------------------------------------------------------------------------

  之前的测试果然很粗糙,搞错了一个概念,return到底是在什么时候才算执行,什么时候执行完。上面打印“我是return”的时候,我以为是return执行完了,其实那个时候只是去准备return的返回值去了,并没有真正的返回“1”并跳出Test()方法,准备好返回值之后,接着去执行finally{}里面的code,打印了“我是finally”,最后Test()方法才算执行完,并真正的返回(return)“1”到main里面。

按照@以后会觉得昵称很幼稚 老哥的提醒,修改了一下main()里面的代码,

1
2
3
4
5
6
7
static 
void 
Main(
string
[] args)
{
    
//测试
    
Console.WriteLine(
"Test结果:" 
+ Test());
    
System.Console.WriteLine(
"结束了"
);
    
System.Console.ReadLine();
}

  结果如下:

  

  所以finally{}里面的code应该是在return之前执行的。

  在http://bbs.csdn.net/topics/60474475 此贴中,五楼的老哥的话,“函数应该是栈调用,如果先执行return ,哪不是退到上个栈了,怎么调用finally, 所以我觉得先调用finally”,

  在http://blog.csdn.net/gaoyuanfeng/article/details/4064388 文章中,finally与return的关系也讲得很明白了,这一天天的真是受教了。

 

 

 

第一次写,做个小笔记。

第一步:获取该日期的星期数;

第二步:在该日期上减去他的星期数再减1,(注:星期日获取到的星期数是0);

下面是具体代码:

1
2
3
4
5
6
7
8
9
function 
GetMonday(dd) {
    
var 
week = dd.getDay(); 
//获取时间的星期数
    
var 
minus = week ? week - 1 : 6;
    
dd.setDate(dd.getDate() - minus); 
//获取minus天前的日期
    
var 
y = dd.getFullYear();
    
var 
m = dd.getMonth() + 1; 
//获取月份
    
var 
d = dd.getDate();
    
return 
y + 
"-" 
+ m + 
"-" 
+ d;
}

  

你可能感兴趣的文章
js+css实例超漂亮tab切换选项卡代码
查看>>
uva11825Hacker's Crackdown
查看>>
Strange Towers of Hanoi(DP,汉诺塔)
查看>>
Page cache和Buffer cache[转1]
查看>>
设计模式:适配器模式(Adapter Pattern)
查看>>
linux注销、关机、重启
查看>>
一个升级程序
查看>>
CSS:display 属性
查看>>
多路复用IO一例
查看>>
Martin Fowler论21世纪的软件设计
查看>>
ubuntu下安装Apache+PHP+MySQL
查看>>
nandflash擦除、写操作的状态判断
查看>>
Google Test Automation Conference 2013 Schedule
查看>>
文件版本paip.软件版本完善计划C426fromVC423
查看>>
latex测试
查看>>
python 调用解释器
查看>>
Fedora18下NetKeeper的使用
查看>>
AndroidUI 视图动画-缩放动画效果 (ScaleAnimation)
查看>>
北京Uber优步司机奖励政策(9月28日~10月4日)
查看>>
Unity判断网络连接类型
查看>>