总结 乱

 

 

C# 参考之方法参数关键字:paramsrefout

如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值。通过使用方法参数关键字,可以更改这种行为。

来自 <http://www.cnblogs.com/hunts/archive/2007/01/13/619620.html>

 

C#() =>lambda表达式,表示一个匿名函数,=>前面的是参数,后面的是函数体。

可以把它当作一个函数。

举例:

Func<int, int, int> Add = (x, y) => x + y;

Console.WriteLine(Add(2, 3)); // 5

 

 

Server.HtmlEncode 顾名思义 html编码

Server.HtmlDecode 顾名思义 html反编码

1)保存数据库之前就进行HTML编码(Server.HtmlEncode),读取显示时直接输出

2)保存数据库之前未进行HTML编码,读取显示前(Server.HtmlEncode)

 

C#<summary>的用途

在一个类,方法或属性定义的上一行输入///就会出现<summary>. 调用这个类或方法时写在<summary>里的东西就会以提示的方式出现..

例如:  /// <summary>

        /// 功能:完成消费交易的撤销,其处理流程是根据原交易终端流水号,找到原交易,并把该交易撤销,系统只支持当日撤销。

        /// </summary>

        /// <param name="p_Track2">2磁道信息,37bytes,右补空格</param>

        /// <param name="Track3">3磁道信息,104bytes,右补空格</param>

        /// <param name="Amount">原交易金额,单位:分</param>

        /// <param name="termstan">原交易终端流水号,6bytes</param>

        /// <param name="OperNo">操作员号,不定长</param>

        /// <param name="bitmap58">保留参数1,不定长</param>

        /// <param name="bitmap59">保留参数2,不定长</param>

        /// <returns></returns>

        [DllImport(@"C:\WINDOWS\icbc\MposCore.dll")]

        [return: MarshalAs(UnmanagedType.BStr)]

        public static extern string DoRefund(StringBuilder p_Track2, StringBuilder Track3, int Amount, StringBuilder termstan, StringBuilder OperNo, StringBuilder bitmap58, StringBuilder bitmap59);

 

 

5.HTTP GET

 

 

POST

public Response Invoke(Request request, string body)

        {

            var httpResponse = string.Empty;

            var url = request.GenerateUrl(BaseUrl);

            log.Info("RequestUrl:\r\n" + url);

            try

            {

                var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

                httpWebRequest.Method = "POST";

                httpWebRequest.ContentType = "application/json";

                httpWebRequest.Accept = "*/*";

                httpWebRequest.Connection = "Keep-Alive";

                httpWebRequest.KeepAlive = true;

                httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)";

                httpWebRequest.Timeout = 15000;

 

                byte[] btBodys = Encoding.UTF8.GetBytes(body);

                httpWebRequest.ContentLength = btBodys.Length;

                httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);

 

                using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())

                {

                    using (var streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8))

                    {

                        httpResponse = streamReader.ReadToEnd();

                    }

                    httpWebRequest.Abort();

                    httpWebResponse.Close();

                }

 

                log.Info("ResponseRaw:\r\n" + httpResponse);

            }

            catch (Exception e)

            {

                log.ErrorFormat("调用WebApi失败,{0},url:{1}", e.Message, url);

                return Response.NoResponse;

            }

            var response = new Response(request.Method, httpResponse);

            log.Debug("ResponseContent:\r\n" + response.reBased);

            return response;

        }

 

介绍 日志 概念

       • 日志是一种 调试 和 追踪 手段. (调试手段还有 断点,单步执行,断言,内存快照,alert 等)

       • 日志的优点: 无须人工干预,能长期记录,对程序的侵入性小,能灵活配置

       • log4net 的配置和使用:

       1. 引用log4net.dll

       2. 添加 log4net 配置

       3. 在程序开始的地方启动配置 log4net.Config.XmlConfigurator.Configure();

       4. 在需要添加日志功能的类加上log字段 private static readonly log4net.ILog log = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

 

1.引用log4net.dll

 

 

 

2/添加log4net配置

<?xml version="1.0" encoding="utf-8"?>

<configuration>

  <configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

  </configSections>

 

  <appSettings>

  </appSettings>

  <startup>

    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>

  </startup>

 

  <log4net>

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />

      </layout>

    </appender>

 

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">

      <file value="logs\log.txt" />

      <appendToFile value="true" />

      <maxSizeRollBackups value="50" />

      <maximumFileSize value="1MB" />

      <rollingStyle value="Size" />

      <staticLogFileName value="true" />

      <layout type="log4net.Layout.PatternLayout">

        <header value="[Header]&#13;&#10;" />

        <footer value="[Footer]&#13;&#10;" />

        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />

      </layout>

    </appender>

 

    <root>

      <level value="DEBUG" />    ----------------------------------默认为DEBUG(对应用法log.DEBUG/log.ERROR等)

      <appender-ref ref="RollingLogFileAppender" />

      <appender-ref ref="ConsoleAppender" />

    </root>

 

  </log4net>

</configuration>

 

 3/在程序开始的地方启动配置

namespace ServiceSelf

{

    public partial class frmMain : FormBase

    {

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(

            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public frmMain()

        {

            log4net.Config.XmlConfigurator.Configure();

            log.Debug("程序启动");

4/在需要添加日志功能的类加上log字段

 public class BankCard : GLib.IBankCardPayfor

    {

        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(

            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public string ProviderName

        {

            get { return "银联卡"; }

        }

        private bool m_Inited = false;

        public bool Init()

        {

            try

            {

                //初始化读卡器

                int i_appType = 1;//01

                int nResult = API.UMS_Init(i_appType);

                log.Debug("银联卡收银初始化");

                if (nResult != 0)

                {

                    FrontEnd.SaveLog("银联卡收银", "API.UMS_Init返回值:" + nResult.ToString());

                    log.Debug("初始化UMS_Init返回值:" + nResult.ToString());

                    return false;

                }

 

 C#中的Action<>和Func<>

http://blog.csdn.net/jcx5083761/article/details/8552627

 

 

利用wsdl.exe 生成 webservice 代理类

 

来自 <http://blog.csdn.net/leapenemc0907/article/details/6067243>

 

管理员身份运行CMD

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\WSDL" /l:CS /n:Dadi.Service.SmClients /o:ErbanSmProxy.cs "http://sms.2office.net/WebService/services/SmsService?wsdl"

 

 

wsdl /l:CS /n:InsuranceLib /o:EcooperationWebServiceService.cs http://test.mypicc.com.cn/ecooperation/webservice/insure?wsdl

 

wsdl /l:CS /n:F2FPay /o:FrontAlipayService.cs http://localhost:8081/FrontAlipayService.asmx

 

常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。

    2.使用VS.NET中的Add Web Reference菜单选项

 

来自 http://www.cnblogs.com/fan0136/archive/2009/09/21/1571238.html

 

 

 

Fiddle

在会话列表中默认的文本的颜色从HTTP的响应的状态继承而来(红色代表错误,黄色代表需要授权)CONNECT类型为灰色,

还有返回类型(CSS文件为紫色,HTML文件为蓝色,JS脚本为绿色,图片为灰色)你可以通过使用ui-color 标志位来改变和重写列表的默认颜色。

(提示:ui-colorFiddler的脚本配置文件中,需要安装FiddlerScript

 

来自 <http://www.cnblogs.com/kingwolf_JavaScript/archive/2012/11/07/FiddlerUI.html>

DllImport

 

/// <summary>

        /// 初始化密码键盘,检查冲正

        /// </summary>

        /// <param name="appType">应用类型 1:传统银行卡应用2:全民付应用3:预付卡</param>

        /// <returns></returns>

        [DllImport("\\umsips\\umsapi.dll")]

        public static extern int UMS_Init(int appType);

 

 

/// <summary>

        /// 初始化密码键盘,检查冲正

        /// </summary>

        /// <param name="appType">应用类型 1:传统银行卡应用2:全民付应用3:预付卡</param>

        /// <returns></returns>

        [DllImport(@"C:\umsips\umsapi.dll")]

public static extern int UMS_Init(int appType);

 

 

 #region 创自读卡器API

        /// <summary>

        /// 打开串口

        /// </summary>

        /// <param name="port">串口号</param>

        /// <returns>0:成功 2:串口已打开 其它:失败</returns>

        [DllImport("CRT310.dll")]

        public static extern int OpenDevice(int port);

 

 

app.config 文件:

      它是标准的 XML 格式文件, Settings.settings 所设置的所有属性,都在 app.config 有所体现,也就是你可以通过配置到 app.config 文件中写入你想要的

 

来自 <http://blog.sina.com.cn/s/blog_6e5c92860100mnm6.html>

Program.cs文件:

整个应用程序的入口,Application.Run(new main.main());语句标记了你启动的窗口,你可以通过改变参数来设置你的启示界面。

 

来自 <http://blog.sina.com.cn/s/blog_6e5c92860100mnm6.html>

 

Failed to access IIS metabase解决方案:

原因:IIS没有注册

解决办法:在CMD中进入目录C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,运行aspnet_regiis

1、aspnet_regiis -ga administrator(administrator为当前用户)

C:\Documents and Settings\Administrator>cd c:\\windows\\microsoft.net\\framework\\v2.0.50727

2、aspnet_regiis -i (注册IIS)

 

来自 <http://www.cnblogs.com/skylaugh/archive/2011/06/22/2086759.html>

raiserror 是用于抛出一个错误

 

来自 <http://www.cnblogs.com/xugang/archive/2011/04/09/2010216.html>

 

-- =============================================

-- Description:        一证一票实名制购票时,是否重复

-- =============================================

CREATE PROCEDURE self_IsSameOfRealNameSchem

@StationNo INT,                                --隶属站编号

@DriveDate DATETIME,                --发车日期

@SchemNo INT,                                --车次号

@IDCardNoList NVARCHAR(MAX),--证件号码列表,中间用半角逗号分开

@TicketNum INT                                --购票数量

AS

BEGIN

 

SET NOCOUNT ON;

--查询班次信息

DECLARE @TagStr NVARCHAR(50),@RealNameNeed BIT

SELECT @TagStr=识别号,@RealNameNeed=售票实名制

FROM dbo.可售班次 WITH(NOLOCK)

WHERE 发车日期=@DriveDate AND 隶属站编号=@StationNo AND 车次号=@SchemNo

 

IF @TagStr IS NULL

BEGIN

RAISERROR('查询班次信息失败',16,1)

RETURN 1

END

IF @RealNameNeed=0--不要求实名制直接返回

RETURN 0

 

DECLARE @Error NVARCHAR(4000),@InputNum INT

SELECT 子串 INTO #IDCardNoList

FROM dbo.SpitStringToTable(@IDCardNoList,',')

SELECT @InputNum=@@ROWCOUNT

 

IF dbo.GetPublicSetInfo('实名制购票一票一证','0')='1' AND @InputNum<@TicketNum

BEGIN

RAISERROR('证件数量不得少于购票数量',16,1)

RETURN 1

END

--检查有没有重复的

SELECT 子串,COUNT(*) AS 数量

INTO #OnlyOne

FROM #IDCardNoList

GROUP BY 子串

SELECT @Error=''

SELECT @Error=@Error+子串

FROM #OnlyOne

WHERE 数量>1

IF LEN(@Error)>1

BEGIN

SELECT @Error='传入的证件号参数重复:'+@Error

RAISERROR(@Error,16,1)

RETURN 1

end

 

if dbo.GetPublicSetInfo('同证件号实名制售票','1')='0'

BEGIN

SELECT @Error=''

SELECT DISTINCT @Error=@Error+证件号码+','

FROM #IDCardNoList A INNER JOIN dbo.售票记录 B WITH(NOLOCK)

ON B.班次识别号=@TagStr AND A.子串=B.证件号码 AND B.当前状态='已售'

IF LEN(@Error)>1

BEGIN

SELECT @Error='下列证件号已有同班次售票记录:'+@Error

RAISERROR(@Error,16,1)

RETURN 1

end

END

 

END

 

GO

public static bool ExecSql(string p_strSql, string p_ConnectString, SqlParaValueInfo[] p_Paras)

        {

            ClearErrors();

            bool bResult = false;

            using (SqlConnection connection = new SqlConnection(p_ConnectString))

            {

                try

                {

                    connection.Open();

                    using (SqlCommand command = new SqlCommand(p_strSql, connection))

                    {

                        foreach (SqlParameter para in GetSqlParams(p_Paras))

                            command.Parameters.Add(para);

                        command.CommandTimeout = DB.TimeOutTime;

                        command.ExecuteNonQuery();

                        bResult = true;

                    }

                }

                catch (Exception ee)

                {

                    m_ErrMsg = ee.Message;

                    WriteSqlError(p_strSql, ee.Message);

                }

                finally

                {

                    connection.Close();

                }

            }

            return bResult;

        }

 

EXEC  [dbo].[self_IsSameOfRealNameSchem]

@StationNo=9992,

@DriveDate='2016-07-07',

@SchemNo=7613,

@IDCardNoList=130423198906274027,

@TicketNum=1

65 (self_IsSameOfRealNameSchem)        下列证件号已有同班次售票记录:130423198906274027, Severity 16

EXEC  [dbo].[self_IsSameOfRealNameSchem]

@StationNo=9992,

@DriveDate='2016-07-07',

@SchemNo=5328,

@IDCardNoList=',42098419810607101X',

@TicketNum=1

 

异步

 control.begininvoke(参数delegate)方法:在创建控件的基础句柄所在线程上异步执行指定委托。

 

invoke(同步)和begininvoke(异步)的概念,其实它们所说的意思是相对于子线程而言的,其实对于控件的调用总是由主线程来执行的

 

来自 <http://blog.csdn.net/thebesttome/article/details/7589856>

 

Web API来管理联系人

         说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟

 

来自 <http://www.cnblogs.com/qingyuan/archive/2012/10/16/2725378.html>

 

XML---对象系列化与反系列化

 

来自 <http://blog.csdn.net/hdhai9451/article/details/12129579>

 

   public static string ObjectToXml(object obj, bool toBeIndented, Type type)

        {

            if (obj == null)

            {

                throw new ArgumentNullException("obj");

            }

 

            //Create our own namespaces for the output

            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            //Add an empty namespace and empty value

            ns.Add("", "");

 

            Encoding gb2312 = Encoding.GetEncoding("GB2312");

            XmlSerializer serializer = new XmlSerializer(type);

            MemoryStream stream = new MemoryStream();

            XmlTextWriter writer = new XmlTextWriter(stream, gb2312);

            writer.Formatting = (toBeIndented ? Formatting.Indented : Formatting.None);

            serializer.Serialize(writer, obj, ns);

            string xml = gb2312.GetString(stream.ToArray());

            writer.Close();

            return xml;

        }

 

        public static string EndorseXML(GeneralInfo Head, List<EndorseInfo> lEndorse)

        {

            PolicyEndorsement pe = new PolicyEndorsement();

            pe.Head = Head;

            pe.EndorseInfos = lEndorse;

 

            StringBuilder sb = new StringBuilder();

            sb.Append(ObjectToXml(pe, false, typeof(PolicyEndorsement)));

            return sb.ToString();

        }

 

        //xml转行为实体类

        /// <summary>

        /// xml文件转化为实体类列表

        /// </summary>

        /// <typeparam name="T">实体名称</typeparam>

        /// <param name="xml">xml文件</param>

        /// <param name="headtag">xml头文件</param>

        /// <returns>实体列表</returns>

        public static List<T> XmlToObjectList<T>(string xml, string headtag) where T : new()

        {

            List<T> list = new List<T>();

            XmlDocument doc = new XmlDocument();

            PropertyInfo[] propinfos = null;

            doc.LoadXml(xml);

            //XmlNodeList nodelist = doc.SelectNodes(headtag);

            XmlNodeList nodelist = doc.GetElementsByTagName(headtag);

            foreach (XmlNode node in nodelist)

            {

                T entity = new T();

                //初始化propertyinfo

                if (propinfos == null)

                {

                    Type objtype = entity.GetType();

                    propinfos = objtype.GetProperties();

                }

                //填充entity类的属性

                foreach (PropertyInfo propinfo in propinfos)

                {

                    //实体类字段首字母变成小写的

                    string name = propinfo.Name.Substring(0, 1) + propinfo.Name.Substring(1, propinfo.Name.Length - 1);

                    XmlNode cnode = node.SelectSingleNode(name);

                    string v = cnode.InnerText;

                    if (!string.IsNullOrEmpty(v))

                    {

                        propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);

                    }

                }

                list.Add(entity);

 

            }

            return list;

        }

 

请求:

            GeneralInfo gi = new GeneralInfo();

            gi.UUID = Settings.UnitID + DateTime.Now.ToString("yyyyMMddHHmmssfff");

            gi.PlateformCode = Settings.PartnerID;

            List<EndorseInfo> lEndorse = new List<EndorseInfo>();

            StringBuilder sb = new StringBuilder(2000);

            EndorseInfo ei = new EndorseInfo();

            for (int i = 0; i < PolicyNoList.Count; i++)

            {

                ei = new EndorseInfo();

                ei.EndorseDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                ei.PolicyNo = PolicyNoList[i];

                lEndorse.Add(ei);

                sb.Append(ei.PolicyNo);

            }

            gi.Md5Value = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(gi.UUID + sb.ToString().Trim(), "MD5").ToLower();

 

            string res = XmlDispose.EndorseXML(gi, lEndorse);

执行:

string resp = pr.insuranceRequest("001005", res);

 

返回:

                    List<PolicyInfoReturn> lsReturn = pr.PolicyResultXML(resp);

处理方法:

public List<PolicyInfoReturn> PolicyResultXML(string xml)

        {

            if (xml.Length > 0)

            {

                try

                {

                    List<GeneralInfoReturn> gReturn = XmlDispose.XmlToObjectList<GeneralInfoReturn>(xml, "GeneralInfoReturn");

                    log.Debug("投保G" + gReturn[0].ErrorCode);

                    if (gReturn[0].ErrorCode == "00")

                    {

                        List<PolicyInfoReturn> lsReturn = XmlDispose.XmlToObjectList<PolicyInfoReturn>(xml, "PolicyInfoReturn");

                        if (lsReturn != null)

                        {

                            log.Debug("lsReturn数量:" + lsReturn.Count);

                            List<InsuredReturn> lsReturnd = XmlDispose.XmlToObjectList<InsuredReturn>(xml, "InsuredReturn");

                            if (lsReturnd != null)

                            {

                                log.Debug("lsReturnd数量:" + lsReturn.Count);

                                for (int i = 0; i < lsReturnd.Count; i++)

                                {

                                    if (lsReturnd[i].CheckResult != "00")

                                    {

                                        FrontEnd.SaveHardWareLog("保险投保", "保险人返回值有误" + lsReturnd[i].CheckMessage, "软件故障");

                                        return null;

                                    }

                                }

                                return lsReturn;

                            }

                            else

                            {

                                FrontEnd.SaveHardWareLog("保险投保", "保险人返回值为空", "软件故障");

                                return null;

                            }

                        }

                        else

                        {

                            FrontEnd.SaveHardWareLog("保险投保", "投保返回值为空", "软件故障");

                            return null;

                        }

                    }

                    else

                    {

                        FrontEnd.SaveHardWareLog("保险投保", gReturn[0].ErrorCode.Trim(), "软件故障");

                        return null;

                    }

                }

                catch (Exception ex)

                {

                    return null;

                }

            }

            else

            {

                log.Debug("返回值信息:" + xml.Length.ToString());

                FrontEnd.SaveHardWareLog("保险投保", "返回值为空", "软件故障");

                return null;

            }

        }

 

C# Dictionary通过value获取对应的key

 

来自 <http://www.cnblogs.com/mingmingruyuedlut/archive/2013/05/23/3067227.html>

 

Data Source=61.153.65.30,3001;Initial Catalog=FrontEnd;Integrated Security=False;User ID=sa;Password=********;Application Name=GLibApplication

 

 

C#使用SqlBulkCopy批量更新数据

 

来自 <http://blog.csdn.net/ltolll/article/details/10213761>

浅谈OracleBulkCopy的使用

 

来自 <http://blog.csdn.net/msdnchina/article/details/50237609>

DataView.ToTable 方法 (String, Boolean, String[])

Visual Studio 2010

根据现有 DataView 中的行,创建并返回一个新的 DataTable

 

来自 <https://msdn.microsoft.com/zh-cn/library/h2b6ehaa(v=vs.100).aspx>

 

未能为 SSL/TLS 安全通道建立信任的解决办法

2016年8月26日

10:31

远程服务器返回错误 (401) 未经授权解决方案

没有权限 设置权限

WebClient client=new WebClient();

//NetworkCredential credentials = new NetworkCredential("名字", "密码");

//client.Credentials = credentials;

 

未能为 SSL/TLS 安全通道建立信任的解决办法

最简单的办法是:

1,先加入命名空间:

using System.Net.Security;

using System.Security.Authentication;

using System.Security.Cryptography.X509Certificates;

2,再重载CheckValidationResult方法,返回true

public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

{ // 总是接受

     return true;

}

3,然后在HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);前面加上如下一行代码:

ServicePointManager.ServerCertificatidationCallback = new System.Net.Security.RemoteCertificatidationCallback(CheckValidationResult);//验证服务器证书回调自动验证

 

//ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

 

来自 <http://www.cnblogs.com/Jin-1007/archive/2012/04/13/2445596.html>

 

HTML5 LocalStorage 本地存储

 

来自 <http://www.cnblogs.com/xiaowei0705/archive/2011/04/19/2021372.html>

 

 

清空select标签中option

document.formName.selectName.options.length = 0;

 

来自 <http://www.jb51.net/web/90901.html>

 

 

 

 

Windows服务

 

 

 

Ztree

 

 

 

 

 

posted @ 2016-10-19 17:24  songyulan  Views(390)  Comments(0Edit  收藏  举报