编程工作知识汇总
1.向iis注册asp.net:aspnet_regiis -i //安装asp.net<2.0.50.727>
安装与 Aspnet_regiis.exe 关联的 ASP.NET 版本,并更新 IIS 元数据库根目录和根目录下的脚本映射。只更新使用早期 ASP.NET 版本的应用程序的脚本映射。使用新版本的应用程序不受影响。
2.利用SqlBulkCopy可快速大批量导入数据。原文:http://www.xueit.com/html/2009-07/21_4166_00.html
3.IE6中用了float:left之后导致margin-left解释成双倍边距的解决办法,浏览器兼容性问题
div {float:left;margin-left:10px;width:420px;height:150px;}
这样设置左边距设置为10px,但IE6.0解释为20px,解决办法就是是加上display:inline
4.javascript四舍五入:
var dwyje=(js*dwbl/100);
dwyje=parseFloat(dwyje.toFixed(2));//2表示保留两位小数
参考:http://www.w3school.com.cn/js/jsref_tofixed.asp
5.C# 四舍五入
string sFileSize = Math.Round(Convert.ToDecimal(bs.Length / 1024)) + "KB";
6.<%# Container.DataItem %> 获取对象的值,获取当前集合循环到几条对应的值,当集合没有字段名时使用,有字段名一般用Eval
string[] Urls = fserver.getUrls(new Guid("cc09ca7d-9eb2-42cb-9c10-850a754e1ae9"), "tblTest", "id", "1", "Images");
rptImages.DataSource = Urls;
rptImages.DataBind();
<asp:Repeater ID="rptImages" runat="server">
<ItemTemplate>
<div class="thumb">
<a href='#' target="_self">
<asp:Image class="imgs" ID='ImageRpt' runat="server" ImageUrl='<%# Container.DataItem %>' /></a>
</div>
</ItemTemplate>
</asp:Repeater>
读取数据方法:
<%# Eval("fygbm")%>
<%# ((b_ygxxb)Container.DataItem).fygbm%>读取数据方法2
7.VS快捷键,前台和后台均可用 https://www.cnblogs.com/lsgxeva/p/7944986.html
(1).Ctrl+K+C:注释----》Ctrl+K+U:取消注释
(2).竖着选中文字:Alt+鼠标左键,可竖着选中文字并删除
(3).Ctrl+J:列出提示成员
(4).Shift+Alt+Enter:切换到全屏编辑状态
(5).Ctrl+M+O:折叠代码,Ctrl+M+L:展开代码
(6).Ctrl+K+D:格式化代码
(7).Ctrl+R+W:切换 显示空格符
(8).Ctrl+U:将选定行代码变为小写字母
(9).Ctrl+Shift+U:将选定行代码变为大写字母
8.javascript除去字符串两边空格
function trim(str)
{
return str.replace(/(^\s*)|(\s*$)/g, "");//删除左右两端的空格
}
9.C# Trim()去除字符串
string fxm = fxm.TrimEnd(new char[] { ',' });//把fxm字符串最后的,号去除
string str=str.Trim(new char[] { '}', '{' });//把str字符串前面的{去除,后面的}去除
10.Linq多次插入数据库,设置Insert(item,false)可提高效率
string[] fszh = fszhList.Split(',');
string[] lxdh = mobiles.Split(',');
for (int i = 0; i < fszh.Length; i++)
{
DX_Send item = new DX_Send();
item.Id = Guid.NewGuid();
item.fxm = receiverRealNames[i];
item.fsfzh = fszh[i];
item.fjgjc = receiverAppNames[i];
item.title = lstMessageContent.SelectedItem.Text;
item.flxdh = lxdh[i];
item.sendTime = DateTime.Now;
item.sendResult = (isSuccess == true ? "成功" : "失败");
DX_SendController.Insert(item, false);//设置false,暂时不插入数据库
}
DX_SendController.SubmitChanges();//一次性插入
11. 加大单选按钮选中范围,在点击全选字的时候都像点击checkbox
<input id="chk_all" type="checkbox" onclick="checkAll(this.checked)" runat="server"/>
<label for="chk_all" style="vertical-align: middle">全选</label>
12. string sFileSize = Math.Round(Convert.ToDecimal(bs.Length / 1024)) + "KB";//四舍五入
13. winform垃圾回收:GC.Collect(); 强制释放内存
14. /*js实现sleep功能 单位:毫秒*/
function sleep(numberMillis) {
var now = new Date();
var exitTime = now.getTime()+numberMillis;
while (true) {
now = new Date();
if (now.getTime() > exitTime)
break;
}
}
15.js删除数组中元素 调用:urls=urls.del(i);将下面代码复制到js中,就可以调用
Array.prototype.del=function(n) { //n表示第几项,从0开始算起。
//prototype为对象原型,注意这里为对象增加自定义方法的方法。
if(n<0) //如果n<0,则不进行任何操作。
return this;
else
return this.slice(0,n).concat(this.slice(n+1,this.length));
/*
concat方法:返回一个新数组,这个新数组是由两个或更多数组组合而成的。
这里就是返回this.slice(0,n)/this.slice(n+1,this.length)
组成的新数组,这中间,刚好少了第n项。
slice方法: 返回一个数组的一段,两个参数,分别指定开始和结束的位置。
*/
}
16. string[] arrs = Regex.Split(ln, "\t", RegexOptions.IgnoreCase);//按\t分割字符串,忽略大小写
17.css样式新写法,如果多个类别样式相同值:
.cartype,.wheeltype,.carloading,.carimg{display:none;}
18.往数组指定位置插入一条数据
private static string[] InsertArray(string[] array, string insertData, int index)
{
string[] temp = new string[array.Length + 1];
for (int i = 0; i < temp.Length; i++)
{
try
{
if (i <= array.Length)
temp[i] = array[i];
}
catch
{
}
if (i == index)
temp[i] = insertData;
else if (i > index)
temp[i] = array[i - 1];
}
return temp;
}
19. //获取本机的公网IP
private static string GetIP()
{
string tempip = "";
try
{
WebRequest wr = WebRequest.Create("http://www.ip138.com/ip2city.asp");
Stream s = wr.GetResponse().GetResponseStream();
StreamReader sr = new StreamReader(s, Encoding.Default);
string all = sr.ReadToEnd(); //读取网站的数据
int start = all.IndexOf("[") + 1;
int end = all.IndexOf("]", start);
tempip = all.Substring(start, end - start);
sr.Close();
s.Close();
}
catch
{
}
return tempip;
}
20.SqlServer2005让查询结果窗口显示隐藏快捷键:ctrl+r
执行选中代码F5或Alt+X
21.Path.Combine(Server.MapPath("."), "ExcelNextSS.aspx");//合并两个字符串路径
22.C# winform 设置光标状态
Cursor cr = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;//将光标置为等待状态
Cursor.Current = cr;//将光标置回原来状态
23.计算sql语句执行时间
declare @date1 datetime
declare @date2 datetime
select @date1=getdate()
要执行的sql语句
select @date2=getdate()
select datediff(millisecond, @date1, @date2)
24.使用js实现无刷新效果
get方式:
var html = fdjs + " ," + xmjs + " ," + dwbl + " ," + grbl + " ," + zbl + " ," + jklx + "," + jkfs + "," + xmlx;
var num = Math.random(); //获取随机数
var type = "update";
if (confirm("确定修改当前基本项目信息吗?")) {
$.get("ajax/ajaxSysConfig.aspx", { fnbid: fnbid, html: html, type: type, num: num }, function(data) {
if (data == "true") {
alert("成功");
}
else {
alert(data);
}
});
}
post方式:
$.ajax({
type:"POST",
url:"ajax/ajaxDXFS.aspx",
data:{tag:"add",title:$("#txtTitle").val(),content:$("#txtMessageContent").val(),relationTable:"<%=relationTable %>"},
success:function(msg)
{
if(msg.indexOf("添加成功")>-1)
{
var id=msg.substring(msg.indexOf("=")+1);
$("#lstMessageContent0").append("<option value='" + id + "'>" + $("#txtTitle").val() + "</option>");
reset();
alert("添加成功!");
}
else
{
alert(msg);
}
}
});
25.使用自定义属性如下,给按钮lkbtn_del自定义fsx属性,lkbtn_del在repreater控件中
<asp:Button ID="lkbtn_del" class='btn_<%#Eval("fnbid") %>' runat="server" CssClass="btn_2k3"
Text="撤销" CommandArgument='<%#Eval("fnbid") %>' CommandName='<%#Eval("fczsj","{0:d}") %>' fsx='<%#Eval("fsx") %>'
OnClick="lkbtn_del_Click" />
后台获取自定义属性
protected void rpt_history_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (PageBase.RealName != "系统管理员")
{
Button btn = e.Item.FindControl("lkbtn_del") as Button;
if (btn.CommandName != "")
{
if (btn.Attributes["fsx"] == "是")
{
DateTime startTime = DateTime.Parse(btn.CommandName);
DateTime endTime = DateTime.Parse(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd"));
if (endTime > startTime)
{
btn.Enabled = false;
}
}
}
}
}
26.$.trim();//相当于C#中str.Trim();
27.var zr = total / totalmonth;
zr = zr.toFixed(2);//可把 Number 四舍五入为指定小数位数的数字
28./// <summary>
/// 页面加载绑定是否选中
/// </summary>
private void uidsbind()
{
if (ViewState["uids"] != null)
{
string uids = ViewState["uids"].ToString();
string[] uid = uids.Split(',');
for (int j = 0; j < uid.Length; j++)
{
string a = uid[j];
for (int i = 0; i < rptLaw.Items.Count; i++)
{
HtmlInputCheckBox hib = rptLaw.Items[i].FindControl("chkNotice") as HtmlInputCheckBox;
if (hib.Value == a)
{
hib.Checked = true;
}
}
}
}
}
29.qq快捷键:
ctrl+alt+a:全屏截图
ctrl+alt+z:快速显示消息窗口
30.清空数据库日志:
DBCC SHRINKFILE(Cnfesc_log,0) --收缩日志数据库
DUMP TRANSACTION Cnfesc WITH NO_LOG --清空日志
31.Linq查询:
public static ModuleModel GetModuleByUserid(Guid userid)
{
var list = from u in DataContext.aspnet_UsersInRoles
from r in DataContext.aspnet_RolesPrivilege
from p in DataContext.aspnet_Privilege
from m in DataContext.SModule
where u.aspnet_Users.UserId == userid && u.RoleId == r.aspnet_Roles.RoleId && r.PrivilegeId == p.PrivilegeId && p.ModuleId == m.ModuleId
select new ModuleModel
{
ModuleId = m.ModuleId,
ModuleName = m.ModuleName
};
if (list.Count() > 0)
return list.First();
else return null;
}
public static IQueryable<UsersModel> GetUserByPrivilegeName(string privilegeName)
{
var list = from user in DataContext.aspnet_Users
from ur in DataContext.aspnet_UsersInRoles
from rp in DataContext.aspnet_RolesPrivilege
from p in DataContext.aspnet_Privilege
where user.UserId == ur.UserId &&
ur.RoleId == rp.RolesId && rp.PrivilegeId == p.PrivilegeId
&& p.PrivilegeName == privilegeName
select new UsersModel
{
UserId = user.UserId,
UserName = user.UserName,
RoleId = ur.RoleId
};
return list;
}
32.<input type="file" size="50"/>标签的宽度兼容IE和火狐,要使用size属性,width不能兼容ie和火狐
33.运算符:??,空合并运算符
string a;
a= //此处给a赋值
if (a == null)
{
label1.Text = "a为NULL";
}
else
{
label1.Text = a;
}
等于
string a;
a= //此处给a赋值
label1.Text = a ?? "a为NULL";
http://topic.csdn.net/u/20101229/21/7832717b-3346-44c5-90ab-78742841d24d.html?37337
34.配置文件web.config
<system.web>
<!--
设置 compilation debug="true" 将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为 true。
-->
<compilation debug="true"/>
<!--设置缓存,时间为10秒,也就是10秒检查数据库的数据是否更新 -->
<caching>
<sqlCacheDependency enabled="true" pollTime="10000">
<databases>
<add name="stuDB" connectionStringName="DBConn"
pollTime="10000"/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
35.E6/7 单选按钮 radio 无法选中解决方法
今天在做一个页面,居然ff没问题,ie6/7上浏览的时候radio单选按钮不能被选中。
解决方案:
设置一个name ,且有值,或空格即可。
即:<input type="radio" name=" "/>
问题即可解决。
36.javascript中parseInt(),08,09,返回0
javascript中在使用parseInt(08)、parseInt(09),进行整数转换的时候,返回值是0,而parseInt("01")...parseInt("07")都是正确的,原因是当在前面有"0"时,javascript会认为这是一个八进制数,而"08"和"09"不是一个合法的八进制数,所以导致了那个问题。
parseInt函数实际上有另一个参数,显示的告诉parseInt按照十进制处理。
解决的方法:
parseInt("08",10) 或者 parseInt("09",10)
Number("08")或者Number("09")
http://www.360doc.com/content/11/0107/14/4372345_84728730.shtml
37.并发、海量数据处理尽量少使用using也能提升效率
http://www.3fwork.com/b102/000675MYM002782/
38.在iframe父子交互时,判断子页面所在iframe可以用js查看所在iframe的html代码:parent.document.body.innerText
根据src获取iframe对象,parent.$("iframe[src$='/Index']")
子页面获取父页面的控件值,parent.$("iframe[src$='/Index']").contents().find("#父页面控件id").val()
39.SQLServer2008R2打开性能分析器分析sql语句资源消耗情况,选中数据库根节点,然后按快捷键Ctrl+Alt+A
40.Js 时间间隔计算(间隔天数)
function GetDateDiff(startDate,endDate) { var startTime = new Date(Date.parse(startDate.replace(/-/g, "/"))).getTime(); var endTime = new Date(Date.parse(endDate.replace(/-/g, "/"))).getTime(); var dates = Math.abs((startTime - endTime))/(1000*60*60*24); return dates; }
41、Sql根据另一个表的统计信息更新某个字段只
update Users set Profit=(select COALESCE(SUM(Money),0) from BalanceChanges where UserId=Users.Id and Type in(1,2))
42.禁止黏贴和文本提示
<input type="email" name="emailAddress" value="" id="emailAddress" class="small border-5 glow-shadow-2" autocomplete="off" onpaste="return false;" maxlength="320" tabindex="1" required="required" placeholder="電子郵件地址" />
//禁止鼠标粘贴和键盘输入 onselectstart="return false" onkeydown="return false"
43.Process.Start (@"shutdown",@"-s -t 10");列个是10秒钟自动关机
44.md5加密:System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, "md5")
45.不通过临时变量交换两个整数
a ^= b; b ^= a; a ^= b; 直观点 a = a+b; b = a-b; a = a-b;
46.改变IE地址栏的IE图标
我们要先做一个16*16的icon(图标文件),保存为index.ico。把这个图标文件上传到根目录下并在首页<head></head>之间加上如下代码:
<link rel = "Shortcut Icon" href="index.ico">
47.穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){ string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); }else{ string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); }
48.访盗链的FileHandler
public class FileHandler : IHttpHandler { public FileHandler() { } public void ProcessRequest(HttpContext context) { if ((context.Request.UrlReferrer == null) || (context.Request.UrlReferrer.Host == "localhost" && context.Request.UrlReferrer.Port == 16490)) { context.Response.Expires = 0; context.Response.Clear(); context.Response.ContentType = "rar"; context.Response.WriteFile(context.Request.PhysicalPath); context.Response.End(); } else //如果不是本地引用,则属于盗链引用, { HttpResponse response = context.Response; response.Redirect(context.Request.ApplicationPath + "/ErrorPage.htm"); } } public bool IsReusable { get { return false; } } }
49.正则表达式中文检测 Regex RegCHZN = new Regex("[\u4e00-\u9fa5]");
50.int[] 和 string[] 互换
int[] 转 string[] int[] arrInt = {100,101,102}; string[] arrStr = Array.ConvertAll<int, string>(arrInt, delegate(int input) { return input.ToString(); }); string[] 转 int[] string[] arrStr = {"100","101","102"}; int[] arrInt = Array.ConvertAll<string, int>(arr, delegate(string s) { return int.Parse(s); });
51.以固定的分隔符把字符数组生成新字符串
string.Join(string separatorChar,string[] str);
52.Catch(Exception) 只捕捉符合公共语言运行库的异常
Catch{} 则可以捕捉所有类型的异常
53.换行字符串,相当于"\r\n",Environment.NewLine
contains代替indexof
54.尽量不用string str="";//而是string str=string.Empty;
55.网页打印之前隐藏多余部分
function window.onbeforeprint() { // Walk through all the elements in the document with // class="collapsed" and set it to "expanded" just for printing. var coll = document.all.tags("DIV"); if (coll != null) { for (i = 0; i < coll.length; i++) if (coll[i].className == "collapsed") { coll[i].className = "expanded"; // After printing, make sure to set class="collapsed" // only for those that were expanded just for printing. coll[i].bExpandedForPrinting = true; } else if (coll[i].className == "expanded") coll[i].bExpandedForPrinting = false; } } function window.onafterprint() { // Walk through all the elements in the doc with class="expanded" // and set it to "collapsed" if expanded just for // printing. var coll = document.all.tags("DIV"); if (coll != null) { for (i = 0; i < coll.length; i++) if ((coll[i].className == "expanded") && (coll[i].bExpandedForPrinting)) { coll[i].className = "collapsed"; coll[i].bExpandedForPrinting = false; } } }
56.C# 5.0中引入的async 和 await使用测试
public async void MyAsyncTest() { int result = 0; //result = await Task.Run(() => { Thread.Sleep(3000); return 100; }); await Task.Run(() => { Thread.Sleep(3000); }); //Task.Run(() => { Thread.Sleep(3000); Console.WriteLine("等待3秒后结束" + DateTime.Now.ToString()); }); Console.WriteLine("方法内" + DateTime.Now.ToString() + " 返回值:" + result); } private void button3_Click(object sender, EventArgs e) { MyAsyncTest();//不会阻塞 Console.WriteLine("方法后" + DateTime.Now.ToString()); }
测试结果:await标记后的代码,必须等待await中代码执行完毕后才会执行
方法后2017/4/26 10:39:41
方法内2017/4/26 10:39:44 返回值:0
57、ExpandoObject类型的使用
static void Main(string[] args) { dynamic a = new ExpandoObject(); a.Name = "Paul Huang"; a.Age = 24; Console.WriteLine("Name is {0},Age is {1}", a.Name, a.Age); }
实际上,ExpandoObject类显式实现了 IDictionary<string,object> 接口,所以,我们可以知道,其实它里面就是用一个字典来存储动态赋值的数值的,键的类型为字符串,表示属性名;值的类型为object,表示任何类型。
58、判断数据是否存在
string sql = "IF EXISTS (select commentId from SL_DiaryComment where DiaryId=" + +diaryId + ") SELECT 1 else SELECT 0"; object obj = DBHelper<SqlHelper>.ExecuteScalar(sql); return obj != null && Convert.ToBoolean(obj);
59、ASP.NET设置可以跨域请求数据
Response.AppendHeader("Access-Control-Allow-Origin", "*")
Response.AppendHeader("Content-type", "application/json")
61、在Winform中,控件的Visible属性值会受父控件Visible属性的影响
如有一个panel,panel里面包含一个textbox,当panel的Visible为false,就无法通过代码设置textbox的Visible值为true;当设置panel的Visible为true时,textbox的Visible值也会相应的变成true
62.Array.ForEach
Type type = typeof(T); DataTable dt = new DataTable(); //把所有的public属性加入到集合 并添加DataTable的列 Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
63、vs开发环境重置
开始菜单 -->所有程序-->Visual Studio 2017->Visual Studio Tools->VS 2017开发人员命令提示符-》devenv.exe /setup /resetuserdata /resetsettings
64、事物的边界
http://www.cnblogs.com/swtseaman/archive/2012/12/20/2825800.html
其实关于事务处理的边界问题早有定论
没有Application层 事务放在业务逻辑层
有Application层 事务放在Application层
楼主基本都猜对了
具体文献参考《领域驱动设计》和《企业应用架构模式》
65、JS精度问题
https://www.cnblogs.com/xinggood/p/6639022.html
0.0006*10000得出的结果为5.999999999,解决办法0.0006*100*100
66、IE11兼容性解决
* {
box-sizing: content-box;
-webkit-box-sizing: inherit;
-moz-box-sizing: inherit;
}
67、.net中计算代码执行时间
Stopwatch watch = Stopwatch.StartNew();
执行代码
watch.Stop();
Console.WriteLine("程序初始化完毕并启动成功,耗时:{0}", watch.Elapsed);
68、数据库Connection Pool 连接池是什么?
每当程序需要读写数据库的时候。Connection.Open()会使用ConnectionString连接到数据库,数据库会为程序建立 一个连接,并且保持打开状态,此后程序就可以使用T-SQL语句来查询/更新数据库。当执行到Connection.Close()后,数据库就会关闭当 前的连接。
但是如果我的程序需要不定时的打开和关闭连接,(比如说 ASP.Net 或是 Web Service ),例如当Http Request发送到服务器的时候、,我们需要打开Connection 然后使用Select* from Table 返回一个DataTable/DataSet给客户端/浏览器,然后关闭当前的Connection。那每次都Open/Close Connection 如此的频繁操作对于整个系统无疑就成了一种浪费。
ADO.Net Team就给出了一个比较好地解决方法。将先前的Connection保存起来,当下一次需要打开连接的时候就将先前的Connection 交给下一个连接。这就是Connection Pool。
69、遇到了SQLSERVER最大连接数 MAX POOL SIZE 的问题
出现这种问题使因为程序对connection的回收出现了问题,是因为你的代码出出现了过多new connection(),这种情况还是你的代码问题,如果不想把问题归根于程序,那你就可以改变config连接字符串.
在sqlserver中查看链接的Sql
select * from sysprocesses where dbid= db_id('数据库名')
如果在项目中未指明Connectionstring的max pool 的大小,默认是100, 理论最大为32767,如果项目对这个数据库的链接超过了最大限制,则会让后面的链接进行等待,等待时间为15s.
说明:也就是在connectionString中如果未指定max pool size的值,则max pool size=100,当访问人员同时连接数据库的数量为101人时,则等待SqlConnection.ConnectionTimeout设置的时间(默认是15 秒)后,还是没有可用的Connection则会出现上面的错误。
但如果超过了这个时间则会报错,报错详情如下:
中文错误:
超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
英文错误:
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
解决办法:
1.在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。
2.可以在WEB.config 里面修改连接字符串中的Max Pool Size = N;来动态扩大连接池中的连接最大数量。
<add key="data" value="server=192.168.1.123; Port=3336; uid=root; pwd=root;database=Userdata;pooling=true;min pool size=5;max pool size=512;connect timeout = 20; "/>
70、利用js实现 禁用浏览器后退 https://www.cnblogs.com/sunshq/p/7976827.html
<script language="javascript"> //防止页面后退 history.pushState(null, null, document.URL); window.addEventListener('popstate', function () { history.pushState(null, null, document.URL); }); </script> 现在,我们项目中就使用了第三种方式。在常用浏览器中,都可以禁用了后退。 //禁用浏览器返回 function fobidden_back() { //防止页面后退 history.pushState(null, null, document.URL); window.addEventListener('popstate',back_common) } //启用浏览器返回 function enable_back() { history.go(-1); window.removeEventListener('popstate',back_common) } function back_common() { history.pushState(null, null, document.URL); }
71、在 Microsoft SQL Server 的未来版本中将删除 ntext、text 和 image 数据类型。请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。
SQLserver2005以上 的nvarchar(max) 可以存放2G的内容,所以要是 SQL05以上的nvarchar(max)足够你用的了
72、C#中yield关键字用法解释https://www.cnblogs.com/santian/p/4389675.html
当我们需要返回IEnumerable类型的时候,直接yield返回数据就可以了,就不用new一个list,或其他类型,所以yield是一个典型的语法糖。
73. sqlserver2008查询是哪个会话导致堵塞
(1)、在服务器链接上右键,选择“活动和监视器”,看进程项,里面有显示
(2)、查询死锁
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT'
74、C#使用关键字作为变量名,在关键字变量名前面加上@符号即可,如int @new=0;
75、C#生成指定范围的数字随机数,重复性比较低int a= new Random(Guid.NewGuid().GetHashCode()).Next(10)
76、(1)、sqlserver查询的sql语句,sqlserver2008的话,对where条件索引字段的顺序它会自己优化,测试过,顺序对执行计划没有影响,不过2005好像有,所以从规范化来说,还是把筛选性高的放在where的前面,而不是考虑是否聚集索引
(2)、至于建立索引的顺序,就有讲究了:
#1.复合索引的第一个字段最重要,SQL SERVER只生成复合索引第一个字段的统计信息,那么优化器也只能根据复合索引的第一个字段的统计信息来优化查询。
#2.当你自己从业务上了解了数据分布后,怎样写SQL和怎样建立索引就是一门学问了。有时候要根据SQL语句建立索引,有时候要根据已有索引更改SQL语句(用临时表等方法)。
(3)、要想学会创建适合业务的索引,除了业务中的数据分布,你要了解索引的结构(聚集和非聚集),高选择性的概念,数据在页上的存储方式,及看得懂执行计划。
sp_help '表名',拉到最下,有索引的定义
建立索引的原则:https://www.cnblogs.com/lx823706/p/5531395.html
1) 定义主键的数据列一定要建立索引(主键--唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性,只能有一个)。
2) 定义有外键的数据列一定要建立索引( 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的,一个表可以有多个外键)。
3) 对于经常查询的数据列最好建立索引。
4) 对于需要在指定范围内的快速或频繁查询的数据列;
5) 经常用在WHERE子句中的数据列。
6) 经常出现在关键字order by、group by、distinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。
7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。
8) 对于定义为text、image和bit的数据类型的列不要建立索引。
9) 对于经常存取的列避免建立索引
9) 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。
10) 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。
77、C#验证地址是否为url地址:Url.IsWellFormedUriString(url,UriKind.Absolute)
78、最高性能比较两个大文件是否一致
/// <summary> /// 读入到字节数组中比较(ReadOnlySpan) /// </summary> /// <param name="file1"></param> /// <param name="file2"></param> /// <returns></returns> private static bool CompareByReadOnlySpan(string file1, string file2) { const int BYTES_TO_READ = 1024 * 10; using (FileStream fs1 = File.Open(file1, FileMode.Open)) using (FileStream fs2 = File.Open(file2, FileMode.Open)) { byte[] one = new byte[BYTES_TO_READ]; byte[] two = new byte[BYTES_TO_READ]; while (true) { int len1 = fs1.Read(one, 0, BYTES_TO_READ); int len2 = fs2.Read(two, 0, BYTES_TO_READ); // 字节数组可直接转换为ReadOnlySpan if (!((ReadOnlySpan<byte>)one).SequenceEqual((ReadOnlySpan<byte>)two)) return false; if (len1 == 0 || len2 == 0) break; // 有文件读取到了末尾,退出while循环 } } return true; }