### 2021-10-01更新
------ #### ryControls V3.0.2110.0101 - *.[改进]ObjectListView的FindMatchInRange方法改为包含关系而不是开头匹配。
This commit is contained in:
parent
95bffb50bf
commit
9586656c96
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -641,6 +641,14 @@
|
|||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Int64)">
|
||||
<summary>
|
||||
设置节点值
|
||||
</summary>
|
||||
<param name="strName">属性名</param>
|
||||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Decimal)">
|
||||
<summary>
|
||||
设置节点值
|
||||
|
@ -667,7 +675,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<returns></returns>
|
||||
|
@ -736,7 +744,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String,System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -744,7 +752,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByInt(System.String,System.Int32)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(int)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -752,7 +760,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByDecimal(System.String,System.Decimal)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(decimal)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -2615,6 +2623,13 @@
|
|||
<param name="seconds">是否显示秒</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.GetTimeStr(System.Int64)">
|
||||
<summary>
|
||||
将秒数显示成中文表达式
|
||||
</summary>
|
||||
<param name="Seconds"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.DateDiff(System.DateTime)">
|
||||
<summary>
|
||||
计算一个时间与当前本地日期和时间的时间间隔,返回的是时间间隔的日期差的绝对值.
|
||||
|
@ -7004,6 +7019,30 @@
|
|||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(System.String)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
|
@ -7326,6 +7365,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
|
@ -358,6 +358,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,2 +1,2 @@
|
|||
[Money_Op]
|
||||
hwnd=75948
|
||||
hwnd=2298254
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<root>
|
||||
<list id="LastUpdateTime" Value="2021/9/9 8:54:07" />
|
||||
<list id="LastUpdateTime" Value="2021/10/1 11:25:54" />
|
||||
<list id="UpdateAfterTime" Value="0" />
|
||||
</root>
|
Binary file not shown.
|
@ -15261,7 +15261,7 @@
|
|||
</member>
|
||||
<member name="M:BrightIdeasSoftware.ObjectListView.ClearObjects">
|
||||
<summary>
|
||||
Remove all items from this list
|
||||
移除所有对象(线程安全)
|
||||
</summary>
|
||||
<remark>This method can safely be called from background threads.</remark>
|
||||
</member>
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -641,6 +641,14 @@
|
|||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Int64)">
|
||||
<summary>
|
||||
设置节点值
|
||||
</summary>
|
||||
<param name="strName">属性名</param>
|
||||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Decimal)">
|
||||
<summary>
|
||||
设置节点值
|
||||
|
@ -667,7 +675,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<returns></returns>
|
||||
|
@ -736,7 +744,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String,System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -744,7 +752,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByInt(System.String,System.Int32)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(int)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -752,7 +760,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByDecimal(System.String,System.Decimal)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(decimal)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -2615,6 +2623,13 @@
|
|||
<param name="seconds">是否显示秒</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.GetTimeStr(System.Int64)">
|
||||
<summary>
|
||||
将秒数显示成中文表达式
|
||||
</summary>
|
||||
<param name="Seconds"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.DateDiff(System.DateTime)">
|
||||
<summary>
|
||||
计算一个时间与当前本地日期和时间的时间间隔,返回的是时间间隔的日期差的绝对值.
|
||||
|
@ -7004,6 +7019,30 @@
|
|||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(System.String)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
|
@ -7326,6 +7365,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
|
@ -299,6 +299,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
|
@ -358,6 +358,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -15261,7 +15261,7 @@
|
|||
</member>
|
||||
<member name="M:BrightIdeasSoftware.ObjectListView.ClearObjects">
|
||||
<summary>
|
||||
Remove all items from this list
|
||||
移除所有对象(线程安全)
|
||||
</summary>
|
||||
<remark>This method can safely be called from background threads.</remark>
|
||||
</member>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -641,6 +641,14 @@
|
|||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Int64)">
|
||||
<summary>
|
||||
设置节点值
|
||||
</summary>
|
||||
<param name="strName">属性名</param>
|
||||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Decimal)">
|
||||
<summary>
|
||||
设置节点值
|
||||
|
@ -667,7 +675,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<returns></returns>
|
||||
|
@ -736,7 +744,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String,System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -744,7 +752,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByInt(System.String,System.Int32)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(int)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -752,7 +760,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByDecimal(System.String,System.Decimal)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(decimal)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -2615,6 +2623,13 @@
|
|||
<param name="seconds">是否显示秒</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.GetTimeStr(System.Int64)">
|
||||
<summary>
|
||||
将秒数显示成中文表达式
|
||||
</summary>
|
||||
<param name="Seconds"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.DateDiff(System.DateTime)">
|
||||
<summary>
|
||||
计算一个时间与当前本地日期和时间的时间间隔,返回的是时间间隔的日期差的绝对值.
|
||||
|
@ -6977,6 +6992,30 @@
|
|||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(System.String)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
|
@ -7299,6 +7338,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
|
@ -358,6 +358,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -15261,7 +15261,7 @@
|
|||
</member>
|
||||
<member name="M:BrightIdeasSoftware.ObjectListView.ClearObjects">
|
||||
<summary>
|
||||
Remove all items from this list
|
||||
移除所有对象(线程安全)
|
||||
</summary>
|
||||
<remark>This method can safely be called from background threads.</remark>
|
||||
</member>
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -641,6 +641,14 @@
|
|||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Int64)">
|
||||
<summary>
|
||||
设置节点值
|
||||
</summary>
|
||||
<param name="strName">属性名</param>
|
||||
<param name="strValue">属性值</param>
|
||||
<returns>如为1,表示加载成功,为0为失败</returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.Storage.SetAttrValue(System.String,System.Decimal)">
|
||||
<summary>
|
||||
设置节点值
|
||||
|
@ -667,7 +675,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<returns></returns>
|
||||
|
@ -736,7 +744,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValue(System.String,System.String)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(string)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -744,7 +752,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByInt(System.String,System.Int32)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(int)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -752,7 +760,7 @@
|
|||
</member>
|
||||
<member name="M:ryCommon.Storage.GetAttrValueByDecimal(System.String,System.Decimal)">
|
||||
<summary>
|
||||
读取指定节点的值
|
||||
读取指定节点的值(decimal)
|
||||
</summary>
|
||||
<param name="strNode"></param>
|
||||
<param name="defValue"></param>
|
||||
|
@ -2615,6 +2623,13 @@
|
|||
<param name="seconds">是否显示秒</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.GetTimeStr(System.Int64)">
|
||||
<summary>
|
||||
将秒数显示成中文表达式
|
||||
</summary>
|
||||
<param name="Seconds"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommon.RyDate.DateDiff(System.DateTime)">
|
||||
<summary>
|
||||
计算一个时间与当前本地日期和时间的时间间隔,返回的是时间间隔的日期差的绝对值.
|
||||
|
@ -6977,6 +6992,30 @@
|
|||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.IDbInterface.ExecuteNonQuery(System.String)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
|
@ -7299,6 +7338,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SqlDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
|
@ -299,6 +299,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.MySqlDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
|
@ -358,6 +358,30 @@
|
|||
<param name="Parameter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(ryCommonDb.RyQuickSQL,System.String,System.Boolean)">
|
||||
<summary>
|
||||
执行SQL语句
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
<param name="IsAdd">是新增还是更新</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Insert(ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
插入数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.Update(ryCommonDb.RyQuickSQL,System.String)">
|
||||
<summary>
|
||||
更新数据库
|
||||
</summary>
|
||||
<param name="mySQL"></param>
|
||||
<param name="wheresql">where 以后的sql语句</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:ryCommonDb.SQLiteDataProvider.ExecuteNonQuery(System.String,ryCommonDb.RyQuickSQL)">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -15261,7 +15261,7 @@
|
|||
</member>
|
||||
<member name="M:BrightIdeasSoftware.ObjectListView.ClearObjects">
|
||||
<summary>
|
||||
Remove all items from this list
|
||||
移除所有对象(线程安全)
|
||||
</summary>
|
||||
<remark>This method can safely be called from background threads.</remark>
|
||||
</member>
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,9 @@
|
|||
### 2021-09-15更新
|
||||
### 2021-10-01更新
|
||||
------
|
||||
#### ryControls V3.0.2110.0101
|
||||
- *.[改进]ObjectListView的FindMatchInRange方法改为包含关系而不是开头匹配。
|
||||
|
||||
### 2021-09-15更新
|
||||
------
|
||||
#### MyDb V3.0.2109.1501
|
||||
- *.[新增]QuickWeb类的GetSize函数新增支持返回异常信息。
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -131,6 +131,7 @@ namespace Itrycn_Project2
|
|||
{
|
||||
Public_Config.LoadSetting();
|
||||
RyFiles.AddDropDrag(tabPage1.Handle);
|
||||
RySystem.GetOSystemVer();
|
||||
//Itrycn_Project.Itrycn_Db.CreateTable();
|
||||
//var dbver = Itrycn_Db.GetDbVer();
|
||||
//if(dbver==1) //初始版本,并是当前要求的数据库
|
||||
|
|
|
@ -45,6 +45,9 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System">
|
||||
<HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll</HintPath>
|
||||
|
@ -168,6 +171,7 @@
|
|||
<EmbeddedResource Include="SkinForms\SkinMdiForm.resx">
|
||||
<DependentUpon>SkinMdiForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<None Include="app.manifest" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
|
|
78
Source/Itrycn_Project2/app.manifest
Normal file
78
Source/Itrycn_Project2/app.manifest
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<!-- UAC 清单选项
|
||||
如果想要更改 Windows 用户帐户控制级别,请使用
|
||||
以下节点之一替换 requestedExecutionLevel 节点。n
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
||||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
||||
|
||||
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
|
||||
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此
|
||||
元素。
|
||||
-->
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
|
||||
Windows 版本的列表。取消评论适当的元素,
|
||||
Windows 将自动选择最兼容的环境。 -->
|
||||
|
||||
<!-- Windows Vista -->
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
|
||||
|
||||
<!-- Windows 7 -->
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
|
||||
|
||||
<!-- Windows 8 -->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
|
||||
|
||||
<!-- Windows 8.1 -->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
|
||||
|
||||
<!-- Windows 10 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||
|
||||
</application>
|
||||
</compatibility>
|
||||
|
||||
<!-- 指示该应用程序可感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
|
||||
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
|
||||
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应
|
||||
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。
|
||||
|
||||
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
|
||||
<!--
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
||||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
-->
|
||||
|
||||
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
|
||||
<!--
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="Microsoft.Windows.Common-Controls"
|
||||
version="6.0.0.0"
|
||||
processorArchitecture="*"
|
||||
publicKeyToken="6595b64144ccf1df"
|
||||
language="*"
|
||||
/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
-->
|
||||
|
||||
</assembly>
|
|
@ -452,6 +452,26 @@ namespace ryCommon
|
|||
}
|
||||
}
|
||||
#endregion
|
||||
#region 设置节点值(long类型)
|
||||
/// <summary>
|
||||
/// 设置节点值
|
||||
/// </summary>
|
||||
/// <param name="strName">属性名</param>
|
||||
/// <param name="strValue">属性值</param>
|
||||
/// <returns>如为1,表示加载成功,为0为失败</returns>
|
||||
public long SetAttrValue(string strName, long strValue)
|
||||
{
|
||||
try
|
||||
{ //设置节点值
|
||||
element.SetAttribute(strName, strValue.ToString());
|
||||
return 1;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region 设置节点值(decimal类型)
|
||||
/// <summary>
|
||||
/// 设置节点值
|
||||
|
@ -514,7 +534,7 @@ namespace ryCommon
|
|||
#endregion
|
||||
#region 读取指定节点的值
|
||||
/// <summary>
|
||||
/// 读取指定节点的值
|
||||
/// 读取指定节点的值(string)
|
||||
/// </summary>
|
||||
/// <param name="strNode"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -579,7 +599,7 @@ namespace ryCommon
|
|||
/// <param name="strNode"></param>
|
||||
/// <param name="defValue"></param>
|
||||
/// <returns></returns>
|
||||
public Int64 GetAttrValue(string strNode, Int64 defValue)
|
||||
public long GetAttrValue(string strNode, long defValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -656,9 +676,9 @@ namespace ryCommon
|
|||
}
|
||||
}
|
||||
#endregion
|
||||
#region 读取指定节点的值2
|
||||
#region 读取指定节点的值(string)
|
||||
/// <summary>
|
||||
/// 读取指定节点的值
|
||||
/// 读取指定节点的值(string)
|
||||
/// </summary>
|
||||
/// <param name="strNode"></param>
|
||||
/// <param name="defValue"></param>
|
||||
|
@ -685,9 +705,9 @@ namespace ryCommon
|
|||
}
|
||||
}
|
||||
#endregion
|
||||
#region 读取指定节点的值3
|
||||
#region 读取指定节点的值(int)
|
||||
/// <summary>
|
||||
/// 读取指定节点的值
|
||||
/// 读取指定节点的值(int)
|
||||
/// </summary>
|
||||
/// <param name="strNode"></param>
|
||||
/// <param name="defValue"></param>
|
||||
|
@ -707,9 +727,9 @@ namespace ryCommon
|
|||
}
|
||||
}
|
||||
#endregion
|
||||
#region 读取指定节点的值4
|
||||
#region 读取指定节点的值(decimal)
|
||||
/// <summary>
|
||||
/// 读取指定节点的值
|
||||
/// 读取指定节点的值(decimal)
|
||||
/// </summary>
|
||||
/// <param name="strNode"></param>
|
||||
/// <param name="defValue"></param>
|
||||
|
|
|
@ -149,6 +149,27 @@ namespace ryCommonDb
|
|||
/// <summary>
|
||||
/// 执行SQL语句
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
/// <param name="IsAdd">是新增还是更新</param>
|
||||
/// <returns></returns>
|
||||
int ExecuteNonQuery(RyQuickSQL mySQL, string wheresql, bool IsAdd);
|
||||
/// <summary>
|
||||
/// 插入数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
int Insert(RyQuickSQL mySQL);
|
||||
/// <summary>
|
||||
/// 更新数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">where 以后的sql语句</param>
|
||||
/// <returns></returns>
|
||||
int Update(RyQuickSQL mySQL,string wheresql);
|
||||
/// <summary>
|
||||
/// 执行SQL语句
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <returns></returns>
|
||||
int ExecuteNonQuery(string sql);
|
||||
|
|
|
@ -258,6 +258,45 @@ namespace ryCommonDb
|
|||
return i;
|
||||
}
|
||||
/// <summary>
|
||||
/// 执行SQL语句
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
/// <param name="IsAdd">是新增还是更新</param>
|
||||
/// <returns></returns>
|
||||
public int ExecuteNonQuery(RyQuickSQL mySQL, string wheresql, bool IsAdd)
|
||||
{
|
||||
if(IsAdd)
|
||||
{
|
||||
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wheresql.Length == 0) { return -1; }
|
||||
return ExecuteNonQuery(mySQL.GetUpdateSQL()+" where "+wheresql, mySQL);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 插入数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
public int Insert(RyQuickSQL mySQL)
|
||||
{
|
||||
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">where 以后的sql语句</param>
|
||||
/// <returns></returns>
|
||||
public int Update(RyQuickSQL mySQL, string wheresql)
|
||||
{
|
||||
if (wheresql.Length == 0) { return -1; }
|
||||
return ExecuteNonQuery(mySQL.GetUpdateSQL() + " where " + wheresql, mySQL);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
|
|
|
@ -32,5 +32,5 @@ using System;
|
|||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||
// 方法是按如下所示使用“*”: :
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.2109.1501")]
|
||||
[assembly: AssemblyFileVersion("3.0.2109.1501")]
|
||||
[assembly: AssemblyVersion("3.0.2110.0101")]
|
||||
[assembly: AssemblyFileVersion("3.0.2110.0101")]
|
|
@ -166,6 +166,15 @@ namespace ryCommon
|
|||
return dateDiff;
|
||||
}
|
||||
/// <summary>
|
||||
/// 将秒数显示成中文表达式
|
||||
/// </summary>
|
||||
/// <param name="Seconds"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetTimeStr(long Seconds)
|
||||
{
|
||||
return DateDiff(DateTime.MinValue, DateTime.MinValue.AddSeconds(Seconds), true);
|
||||
}
|
||||
/// <summary>
|
||||
/// 计算一个时间与当前本地日期和时间的时间间隔,返回的是时间间隔的日期差的绝对值.
|
||||
/// </summary>
|
||||
/// <param name="DateTime1">一个日期和时间</param>
|
||||
|
|
|
@ -169,6 +169,8 @@ namespace ryCommon
|
|||
return "Windows8.1";
|
||||
case "10.0":
|
||||
return "Windows10";
|
||||
case "10.1":
|
||||
return "Windows11";
|
||||
default:
|
||||
return "未知";
|
||||
}
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{631290D3-7CB8-4B62-833E-361C20A5F2E0}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>MyDb_MSSQL</RootNamespace>
|
||||
<AssemblyName>MyDb_MSSQL</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\输出dll\.NET3.5\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\输出dll\.NET3.5\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="clsMSSQLDb.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SqlDataProvider.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MyDb\MyDbV35.csproj">
|
||||
<Project>{9df20d86-a56e-4cf6-a3d8-f30421297b1b}</Project>
|
||||
<Name>MyDbV35</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,63 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{631290D3-7CB8-4B62-833E-361C20A5F2E0}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>MyDb_MSSQL</RootNamespace>
|
||||
<AssemblyName>MyDb_MSSQL</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\Bin\Debug\CommonControls\.NET4\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DocumentationFile>..\..\Bin\Debug\CommonControls\.NET4\MyDb_MSSQL.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\Bin\Release\CommonControls\.NET4\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\..\Bin\Release\CommonControls\.NET4\MyDb_MSSQL.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="clsMSSQLDb.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SqlDataProvider.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MyDb\MyDbV4.csproj">
|
||||
<Project>{9df20d86-a56e-4cf6-a3d8-f30421297b1b}</Project>
|
||||
<Name>MyDbV4</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,36 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 有关程序集的一般信息由以下
|
||||
// 控制。更改这些特性值可修改
|
||||
// 与程序集关联的信息。
|
||||
[assembly: AssemblyTitle("MyDb_MSSQL")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("MyDb_MSSQL")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
//将 ComVisible 设置为 false 将使此程序集中的类型
|
||||
//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
|
||||
//请将此类型的 ComVisible 特性设置为 true。
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
|
||||
[assembly: Guid("631290d3-7cb8-4b62-833e-361c20a5f2e0")]
|
||||
|
||||
// 程序集的版本信息由下列四个值组成:
|
||||
//
|
||||
// 主版本
|
||||
// 次版本
|
||||
// 生成号
|
||||
// 修订号
|
||||
//
|
||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||
// 方法是按如下所示使用“*”: :
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.2105.2201")]
|
||||
[assembly: AssemblyFileVersion("3.0.2105.2201")]
|
|
@ -1,351 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using DataParameter = System.Data.SqlClient.SqlParameter;
|
||||
using DataCommand = System.Data.SqlClient.SqlCommand;
|
||||
using DataAdapter = System.Data.SqlClient.SqlDataAdapter;
|
||||
namespace ryCommonDb
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class SqlDataProvider:IDbInterface
|
||||
{
|
||||
ryCommonDb.MSSQLDb myDb = new MSSQLDb();
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <returns></returns>
|
||||
public int ConnDb(string sql)
|
||||
{
|
||||
myDb.fv_ConnStr = sql;
|
||||
return myDb.ConnDb();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public int CloseDb()
|
||||
{
|
||||
myDb.CloseDb();
|
||||
return 1;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="wheresql"></param>
|
||||
/// <returns></returns>
|
||||
public int GetCount(string tableName, string wheresql)
|
||||
{
|
||||
string m_where = "";
|
||||
if (wheresql != "")
|
||||
{
|
||||
m_where = " where " + wheresql;
|
||||
}
|
||||
string m_order = "(order by id)";
|
||||
string sql= "select count(*) from (select *,(ROW_NUMBER() OVER" + m_order + ") as myrow from " + tableName + m_where + ") as t";
|
||||
return Convert.ToInt32(myDb.ExecuteSQL(sql,(DataParameter[])GetParameter(), "0")[0]);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="newPwd"></param>
|
||||
/// <returns></returns>
|
||||
public int ChangePwd(string newPwd)
|
||||
{
|
||||
return -1000;
|
||||
}
|
||||
private List<SQLIitem> list_param = new List<SQLIitem>();
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="value"></param>
|
||||
public void AddParameter(string name,object value)
|
||||
{
|
||||
list_param.Add(new SQLIitem(name, value));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="value"></param>
|
||||
public void ClearParameter(object name, object value)
|
||||
{
|
||||
list_param.Clear();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public object[] GetParameter()
|
||||
{
|
||||
DataParameter[] defPar = new DataParameter[list_param.Count];
|
||||
for (int i = 0; i < list_param.Count; i++)
|
||||
{
|
||||
SQLIitem item = (SQLIitem)list_param[i];
|
||||
defPar[i] = new DataParameter("@" + item.Field.TrimStart('@').TrimStart('[').TrimEnd(']'), item.value);
|
||||
}
|
||||
return defPar;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
public object[] GetParameter(RyQuickSQL mySQL)
|
||||
{
|
||||
DataParameter[] defPar = new DataParameter[mySQL.List.Count + mySQL.List_param.Count];
|
||||
for (int i = 0; i < mySQL.List.Count; i++)
|
||||
{
|
||||
SQLIitem item = (SQLIitem)mySQL.List[i];
|
||||
defPar[i] = new DataParameter("@" + item.Field.TrimStart('@').TrimStart('[').TrimEnd(']'), item.value);
|
||||
}
|
||||
for (int i = mySQL.List.Count; i < mySQL.List.Count + mySQL.List_param.Count; i++)
|
||||
{
|
||||
SQLIitem item = (SQLIitem)mySQL.List_param[i - mySQL.List.Count];
|
||||
defPar[i] = new DataParameter("@" + item.Field.TrimStart('@').TrimStart('[').TrimEnd(']'), item.value);
|
||||
}
|
||||
return defPar;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="wheresql"></param>
|
||||
/// <param name="orderSQL"></param>
|
||||
/// <returns></returns>
|
||||
public string GetPageSQL(string tableName, string wheresql, string orderSQL)
|
||||
{
|
||||
return GetPageSQL("*", tableName, wheresql, orderSQL);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="field"></param>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="wheresql"></param>
|
||||
/// <param name="orderSQL"></param>
|
||||
/// <returns></returns>
|
||||
public string GetPageSQL(string field, string tableName, string wheresql, string orderSQL)
|
||||
{
|
||||
string m_where = "";
|
||||
if (wheresql != "")
|
||||
{
|
||||
m_where = " where " + wheresql;
|
||||
}
|
||||
string m_order = "(order by id)";
|
||||
if (orderSQL != "")
|
||||
{
|
||||
m_order = "(" + orderSQL + ")";
|
||||
}
|
||||
return "select "+ field + " from (select *,(ROW_NUMBER() OVER" + m_order + ")as myrow from " + tableName + m_where + ") as t where t.myrow between {recordnum1} and {pageendnum1}";
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="wheresql"></param>
|
||||
/// <param name="orderSQL"></param>
|
||||
/// <returns></returns>
|
||||
public string GetPageSQL2(string tableName, string wheresql, string orderSQL)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="field"></param>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="wheresql"></param>
|
||||
/// <param name="orderSQL"></param>
|
||||
/// <returns></returns>
|
||||
public string GetPageSQL2(string field, string tableName, string wheresql, string orderSQL)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <param name="Parameter"></param>
|
||||
/// <returns></returns>
|
||||
public bool ContainsData(string sql, object[] Parameter)
|
||||
{
|
||||
System.Data.DataSet ds = ReadData(sql, Parameter);
|
||||
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <param name="Parameter"></param>
|
||||
/// <returns></returns>
|
||||
public System.Data.DataSet ReadData(string sql, object[] Parameter)
|
||||
{
|
||||
try
|
||||
{
|
||||
DataCommand cmd = myDb.SQL_cn.CreateCommand();
|
||||
cmd.Parameters.Clear();
|
||||
if (Parameter != null)
|
||||
cmd.Parameters.AddRange(Parameter);
|
||||
cmd.CommandText = sql;
|
||||
DataAdapter ad = new DataAdapter(cmd);
|
||||
System.Data.DataSet ds = new System.Data.DataSet();
|
||||
ad.Fill(ds);
|
||||
ad.Dispose();
|
||||
cmd.Parameters.Clear();
|
||||
cmd.Dispose();
|
||||
return ds;
|
||||
}
|
||||
catch { return new System.Data.DataSet(); }
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
public System.Data.DataSet ReadData(string sql, RyQuickSQL mySQL)
|
||||
{
|
||||
return ReadData(sql,GetParameter(mySQL));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <returns></returns>
|
||||
public System.Data.DataSet ReadData(string sql)
|
||||
{
|
||||
object[] Parameter = null;
|
||||
return ReadData(sql, Parameter);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public System.Data.DataSet ReadData(string tableName, string id)
|
||||
{
|
||||
object[] Parameter = null;
|
||||
return ReadData("select * from " + tableName + " where id=" + id, Parameter);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <param name="Parameter"></param>
|
||||
/// <returns></returns>
|
||||
public int ExecuteNonQuery(string sql, object[] Parameter)
|
||||
{
|
||||
DataCommand cmd = myDb.SQL_cn.CreateCommand();
|
||||
cmd.Parameters.Clear();
|
||||
if(Parameter!=null)
|
||||
cmd.Parameters.AddRange(Parameter);
|
||||
cmd.CommandText = sql;
|
||||
int i= cmd.ExecuteNonQuery();
|
||||
cmd.Parameters.Clear();
|
||||
cmd.Dispose();
|
||||
return i;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
public int ExecuteNonQuery(string sql, RyQuickSQL mySQL)
|
||||
{
|
||||
return ExecuteNonQuery(sql,GetParameter(mySQL));
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <returns></returns>
|
||||
public int ExecuteNonQuery(string sql)
|
||||
{
|
||||
object[] pram = null;
|
||||
return ExecuteNonQuery(sql, pram);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public int DelById(string tableName, string id)
|
||||
{
|
||||
object[] param = null;
|
||||
return ExecuteNonQuery("delete from " + tableName + " where id=" + id, param);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
public int CreateDb(RyQuickSQL mySQL)
|
||||
{
|
||||
string tmpSQL = "CREATE TABLE " + mySQL.TableName + " ([ID] INTEGER PRIMARY KEY,";
|
||||
for (int i = 0; i < mySQL.List.Count; i++)
|
||||
{
|
||||
SQLIitem item = (SQLIitem)mySQL.List[i];
|
||||
if (item.value is string)
|
||||
{
|
||||
if (item.len == 0)
|
||||
{
|
||||
tmpSQL += "[" + item.Field + "] [nvarchar](max),";
|
||||
}
|
||||
else
|
||||
{ tmpSQL += "[" + item.Field + "] [nvarchar]("+ item.len + "),"; }
|
||||
}
|
||||
else if (item.value is int || item.value is Int64)
|
||||
{
|
||||
tmpSQL += "[" + item.Field + "] [int] 0,";
|
||||
}
|
||||
else if (item.value is double || item.value is float)
|
||||
{
|
||||
tmpSQL += "[" + item.Field + "] [float] 0,";
|
||||
}
|
||||
else if (item.value is DateTime)
|
||||
{
|
||||
tmpSQL += "[" + item.Field + "] [DATETIME],";
|
||||
}
|
||||
}
|
||||
object[] param = null;
|
||||
return ExecuteNonQuery(tmpSQL.Substring(0, tmpSQL.Length - 1) + ")", param);
|
||||
}
|
||||
SqlTransaction tr;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void BeginTransaction()
|
||||
{
|
||||
tr = myDb.SQL_cn.BeginTransaction();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void Commit()
|
||||
{
|
||||
tr.Commit();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void Free()
|
||||
{
|
||||
list_param.Clear();
|
||||
myDb.CloseDb();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,529 +0,0 @@
|
|||
//--------------------------日期:2014-2-22
|
||||
//--------------------------版本:1.0.0.0
|
||||
//--------------------------作者:itrycn
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.ComponentModel;
|
||||
namespace ryCommonDb
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class MSSQLDb : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="errorStr"></param>
|
||||
/// <param name="errorId"></param>
|
||||
public delegate void ErrorHandler(object sender, string errorStr,string errorId);
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[Description("发生错误时发生")]
|
||||
public event ErrorHandler OnError;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public SqlConnection SQL_cn;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string fv_ConnStr = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public MSSQLDb()
|
||||
{
|
||||
}
|
||||
/// <summary>
|
||||
/// 连接数据库
|
||||
/// </summary>
|
||||
/// <param name="ConnStr">数据库连接字符串</param>
|
||||
/// <returns></returns>
|
||||
public MSSQLDb(string ConnStr)
|
||||
{
|
||||
fv_ConnStr = ConnStr;
|
||||
}
|
||||
/// <summary>
|
||||
/// 连接数据库
|
||||
/// </summary>
|
||||
/// <param name="DataSource">数据源</param>
|
||||
/// <param name="DbName">数据库名称</param>
|
||||
/// <param name="uId">用户id</param>
|
||||
/// <param name="pwd">用户密码</param>
|
||||
public MSSQLDb(string DataSource, string DbName, string uId, string pwd)
|
||||
{
|
||||
if (uId == "")
|
||||
{
|
||||
fv_ConnStr = "Data Source=" + DataSource + ";database=" + DbName + ";Integrated Security=True;Pooling=False";
|
||||
}
|
||||
else
|
||||
{
|
||||
fv_ConnStr = "Data Source=" + DataSource + ";database=" + DbName + ";uid=" + uId + ";pwd=" + pwd;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
~MSSQLDb()
|
||||
{
|
||||
CloseDb();
|
||||
}
|
||||
/// <summary>
|
||||
/// 连接数据库
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public int ConnDb()
|
||||
{
|
||||
try
|
||||
{
|
||||
SQL_cn = new SqlConnection()
|
||||
{
|
||||
ConnectionString = fv_ConnStr,
|
||||
};
|
||||
SQL_cn.Open();
|
||||
return 1;
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this,ex.Message,"errorconn");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 关闭数据库
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public void CloseDb()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (SQL_cn != null && SQL_cn.State != ConnectionState.Closed)
|
||||
{
|
||||
SQL_cn.Close();
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
OnError?.Invoke(this, "关闭数据库出错", "errorclose");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 运行SQL命令
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <param name="commandParameters">SQL命令参数</param>
|
||||
/// <returns>运行失败,则返回-1,否则返回影响的行数</returns>
|
||||
public int ExecuteNonQuery(string SQLText, SqlParameter[] commandParameters)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
if (commandParameters.Length > 0)
|
||||
{
|
||||
foreach (SqlParameter parm in commandParameters)
|
||||
{ cm.Parameters.Add(parm); }
|
||||
}
|
||||
cm.Connection = SQL_cn;
|
||||
int i = cm.ExecuteNonQuery();
|
||||
cm.Parameters.Clear();
|
||||
cm.Dispose();
|
||||
return i;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 运行SQL命令
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <returns>运行失败,则返回-1,否则返回影响的行数</returns>
|
||||
public int ExecuteNonQuery(string SQLText)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
cm.Connection = SQL_cn;
|
||||
int i = cm.ExecuteNonQuery();
|
||||
cm.Dispose();
|
||||
return i;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this,ex.Message,"errrorconn");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 运行SQL命令,并返回结果
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <param name="commandParameters">SQL命令参数</param>
|
||||
/// <returns>运行失败,则返回null,否则返回以数组显示的字符串</returns>
|
||||
public string[] ExecuteSQL(string SQLText, SqlParameter[] commandParameters)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
if (commandParameters.Length > 0)
|
||||
{
|
||||
cm.Parameters.AddRange(commandParameters);
|
||||
}
|
||||
SqlDataReader reader = cm.ExecuteReader();
|
||||
string[] resultStr = null;
|
||||
while (reader.Read())
|
||||
{
|
||||
resultStr = new string[reader.FieldCount];
|
||||
for (int i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
resultStr[i] = reader[i].ToString();
|
||||
}
|
||||
break;
|
||||
}
|
||||
reader.Close();
|
||||
cm.Dispose();
|
||||
return resultStr;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 运行SQL命令,并返回结果
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <param name="commandParameters">SQL命令参数</param>
|
||||
/// <param name="DefFristValue">数组第一个默认的值</param>
|
||||
/// <returns>运行失败,则返回null,否则返回以数组显示的字符串</returns>
|
||||
public string[] ExecuteSQL(string SQLText, SqlParameter[] commandParameters, string DefFristValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
if (commandParameters.Length > 0)
|
||||
{
|
||||
cm.Parameters.AddRange(commandParameters);
|
||||
}
|
||||
SqlDataReader reader = cm.ExecuteReader();
|
||||
string[] resultStr = null;
|
||||
while (reader.Read())
|
||||
{
|
||||
resultStr = new string[reader.FieldCount];
|
||||
for (int i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
resultStr[i] = reader[i].ToString();
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (resultStr == null)
|
||||
{
|
||||
resultStr = new string[1];
|
||||
resultStr[0] = DefFristValue;
|
||||
}
|
||||
cm.Parameters.Clear();
|
||||
reader.Close();
|
||||
cm.Dispose();
|
||||
return resultStr;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
string[] resultStr = null;
|
||||
resultStr = new string[1];
|
||||
resultStr[0] = DefFristValue;
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return resultStr;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 运行SQL命令,并返回结果
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <returns>运行失败,则返回null,否则返回以数组显示的字符串</returns>
|
||||
public string[] ExecuteSQL(string SQLText)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
SqlDataReader reader = cm.ExecuteReader();
|
||||
string[] resultStr = null;
|
||||
while (reader.Read())
|
||||
{
|
||||
resultStr = new string[reader.FieldCount];
|
||||
for (int i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
resultStr[i] = reader[i].ToString();
|
||||
}
|
||||
break;
|
||||
}
|
||||
reader.Close();
|
||||
cm.Dispose();
|
||||
return resultStr;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 运行SQL命令,并返回结果
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <param name="DefFristValue">数组第一个默认的值</param>
|
||||
/// <returns>运行失败,则返回DefFristValue,否则返回以数组显示的字符串</returns>
|
||||
public string[] ExecuteSQL(string SQLText, string DefFristValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
SqlDataReader reader = cm.ExecuteReader();
|
||||
string[] resultStr = null;
|
||||
while (reader.Read())
|
||||
{
|
||||
resultStr = new string[reader.FieldCount];
|
||||
for (int i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
resultStr[i] = reader[i].ToString();
|
||||
}
|
||||
break;
|
||||
}
|
||||
reader.Close();
|
||||
cm.Dispose();
|
||||
if (resultStr == null)
|
||||
{
|
||||
resultStr = new string[1];
|
||||
resultStr[0] = DefFristValue;
|
||||
}
|
||||
return resultStr;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
string[] resultStr = null;
|
||||
resultStr = new string[1];
|
||||
resultStr[0] = DefFristValue;
|
||||
return resultStr;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 清空指定表的所有数据
|
||||
/// </summary>
|
||||
/// <param name="TableName">表名</param>
|
||||
/// <returns>运行失败,则返回-1,否则返回影响的行数</returns>
|
||||
public int ClearTableData(string TableName)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = "delete from " + TableName;
|
||||
cm.Connection = SQL_cn;
|
||||
int i = cm.ExecuteNonQuery();
|
||||
cm.Dispose();
|
||||
return i;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 判断指定值是否存在
|
||||
/// </summary>
|
||||
/// <param name="TableName">表名</param>
|
||||
/// <param name="valueField">指定值所属字段</param>
|
||||
/// <param name="value">指定值</param>
|
||||
/// <param name="curId">当前id,如果是新增记录,请填写-1</param>
|
||||
/// <returns></returns>
|
||||
public bool IsExistValue(string TableName, string valueField, string value, int curId)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = "select * from " + TableName + " where " + valueField + "=@tvalue";
|
||||
cm.Parameters.AddWithValue("@tvalue", DbType.String);
|
||||
cm.Parameters["@tvalue"].Value = value;
|
||||
SqlDataReader reader = cm.ExecuteReader();
|
||||
bool result = false;
|
||||
while (reader.Read())
|
||||
{
|
||||
if (curId < 0)
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (reader["id"].ToString() == curId.ToString())
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
reader.Close();
|
||||
cm.Dispose();
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 判断SQL语句是否有结果返回
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <param name="commandParameters">SQL命令参数</param>
|
||||
/// <returns>运行失败,则返回-1;存在结果,返回1;不存在结果,返回0</returns>
|
||||
public int ExecuteReadResult(string SQLText, SqlParameter[] commandParameters)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
if (commandParameters.Length > 0)
|
||||
{
|
||||
cm.Parameters.AddRange(commandParameters);
|
||||
//foreach (SQLiteParameter parm in commandParameters)
|
||||
//{ cm.Parameters.Add(parm); }
|
||||
}
|
||||
SqlDataReader reader = cm.ExecuteReader();
|
||||
int i = 0;
|
||||
while (reader.Read())
|
||||
{
|
||||
i = 1;
|
||||
break;
|
||||
}
|
||||
reader.Close();
|
||||
cm.Parameters.Clear();
|
||||
cm.Dispose();
|
||||
return i;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 判断SQL语句是否有结果返回
|
||||
/// </summary>
|
||||
/// <param name="SQLText">SQL语句</param>
|
||||
/// <returns>运行失败,则返回-1;存在结果,返回1;不存在结果,返回0</returns>
|
||||
public int ExecuteReadResult(string SQLText)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region 数据库
|
||||
{
|
||||
SqlCommand cm = SQL_cn.CreateCommand();
|
||||
cm.Parameters.Clear();
|
||||
cm.CommandText = SQLText;
|
||||
SqlDataReader reader = cm.ExecuteReader();
|
||||
int i = 0;
|
||||
while (reader.Read())
|
||||
{
|
||||
i = 1;
|
||||
break;
|
||||
}
|
||||
reader.Close();
|
||||
cm.Dispose();
|
||||
return i;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
OnError?.Invoke(this, ex.Message, "errorconn");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
private bool disposed = false;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public virtual void Dispose()
|
||||
{
|
||||
if (!this.disposed)
|
||||
{
|
||||
try
|
||||
{
|
||||
CloseDb();
|
||||
// release scarce resource here
|
||||
}
|
||||
finally
|
||||
{
|
||||
this.disposed = true;
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||
// 方法是按如下所示使用“*”: :
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.2109.1501")]
|
||||
[assembly: AssemblyFileVersion("3.0.2109.1501")]
|
||||
[assembly: AssemblyVersion("3.0.2109.1601")]
|
||||
[assembly: AssemblyFileVersion("3.0.2109.1601")]
|
|
@ -255,6 +255,45 @@ namespace ryCommonDb
|
|||
return i;
|
||||
}
|
||||
/// <summary>
|
||||
/// 执行SQL语句
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
/// <param name="IsAdd">是新增还是更新</param>
|
||||
/// <returns></returns>
|
||||
public int ExecuteNonQuery(RyQuickSQL mySQL, string wheresql, bool IsAdd)
|
||||
{
|
||||
if (IsAdd)
|
||||
{
|
||||
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wheresql.Length == 0) { return -1; }
|
||||
return ExecuteNonQuery(mySQL.GetUpdateSQL() + " where " + wheresql, mySQL);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 插入数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
public int Insert(RyQuickSQL mySQL)
|
||||
{
|
||||
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">where 以后的sql语句</param>
|
||||
/// <returns></returns>
|
||||
public int Update(RyQuickSQL mySQL, string wheresql)
|
||||
{
|
||||
if (wheresql.Length == 0) { return -1; }
|
||||
return ExecuteNonQuery(mySQL.GetUpdateSQL() + " where " + wheresql, mySQL);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
|
|
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||
// 方法是按如下所示使用“*”: :
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.2109.1501")]
|
||||
[assembly: AssemblyFileVersion("3.0.2109.1501")]
|
||||
[assembly: AssemblyVersion("3.0.2109.1601")]
|
||||
[assembly: AssemblyFileVersion("3.0.2109.1601")]
|
|
@ -262,6 +262,45 @@ namespace ryCommonDb
|
|||
return i;
|
||||
}
|
||||
/// <summary>
|
||||
/// 执行SQL语句
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">只针对IsAdd为false才生效,where 以后的sql语句</param>
|
||||
/// <param name="IsAdd">是新增还是更新</param>
|
||||
/// <returns></returns>
|
||||
public int ExecuteNonQuery(RyQuickSQL mySQL, string wheresql, bool IsAdd)
|
||||
{
|
||||
if (IsAdd)
|
||||
{
|
||||
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wheresql.Length == 0) { return -1; }
|
||||
return ExecuteNonQuery(mySQL.GetUpdateSQL() + " where " + wheresql, mySQL);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 插入数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <returns></returns>
|
||||
public int Insert(RyQuickSQL mySQL)
|
||||
{
|
||||
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新数据库
|
||||
/// </summary>
|
||||
/// <param name="mySQL"></param>
|
||||
/// <param name="wheresql">where 以后的sql语句</param>
|
||||
/// <returns></returns>
|
||||
public int Update(RyQuickSQL mySQL, string wheresql)
|
||||
{
|
||||
if (wheresql.Length == 0) { return -1; }
|
||||
return ExecuteNonQuery(mySQL.GetUpdateSQL() + " where " + wheresql, mySQL);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
|
|
|
@ -1,881 +0,0 @@
|
|||
// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
|
||||
// 重要提示:请不要自行修改本类,如果因为你自己修改后将无法升级到新版本。如果确实有什么问题请到官方网站提建议,
|
||||
// 我们一定会及时修改
|
||||
// 编码日期:2011-09-20
|
||||
// 编 码 人:苏飞
|
||||
// 联系方式:361983679
|
||||
// 官方网址:http://www.sufeinet.com/thread-3-1-1.html
|
||||
// 修改日期:2017-01-16
|
||||
// 版 本 号:1.8
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Net;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.IO.Compression;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Net.Security;
|
||||
using System.Linq;
|
||||
using System.Net.Cache;
|
||||
|
||||
namespace DotNet4.Utilities
|
||||
{
|
||||
/// <summary>
|
||||
/// Http连接操作帮助类
|
||||
/// </summary>
|
||||
public class HttpHelper
|
||||
{
|
||||
#region 预定义方变量
|
||||
//默认的编码
|
||||
private Encoding encoding = Encoding.Default;
|
||||
//Post数据编码
|
||||
private Encoding postencoding = Encoding.Default;
|
||||
//HttpWebRequest对象用来发起请求
|
||||
private HttpWebRequest request = null;
|
||||
//获取影响流的数据对象
|
||||
private HttpWebResponse response = null;
|
||||
//设置本地的出口ip和端口
|
||||
private IPEndPoint _IPEndPoint = null;
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="strcookie"></param>
|
||||
/// <returns></returns>
|
||||
public string GetSmallCookie(string strcookie)
|
||||
{
|
||||
string result;
|
||||
if (string.IsNullOrWhiteSpace(strcookie))
|
||||
{
|
||||
result = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<string> list = new List<string>();
|
||||
string[] array = strcookie.ToString().Split(new string[]
|
||||
{
|
||||
",",
|
||||
";"
|
||||
}, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] array2 = array;
|
||||
for (int i = 0; i < array2.Length; i++)
|
||||
{
|
||||
string text = array2[i];
|
||||
string text2 = text.ToLower().Trim().Replace("\r\n", string.Empty).Replace("\n", string.Empty);
|
||||
if (!string.IsNullOrWhiteSpace(text2))
|
||||
{
|
||||
if (text2.Contains("="))
|
||||
{
|
||||
if (!text2.Contains("path="))
|
||||
{
|
||||
if (!text2.Contains("expires="))
|
||||
{
|
||||
if (!text2.Contains("domain="))
|
||||
{
|
||||
if (!list.Contains(text))
|
||||
{
|
||||
list.Add(string.Format("{0};", text));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
result = string.Join(";", list);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据相传入的数据,得到相应页面数据
|
||||
/// </summary>
|
||||
/// <param name="item">参数类对象</param>
|
||||
/// <returns>返回HttpResult类型</returns>
|
||||
public HttpResult GetHtml(HttpItem item)
|
||||
{
|
||||
//返回参数
|
||||
HttpResult result = new HttpResult();
|
||||
try
|
||||
{
|
||||
//准备参数
|
||||
SetRequest(item);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//配置参数时出错
|
||||
return new HttpResult() { Cookie = string.Empty, Header = null, Html = ex.Message, StatusDescription = "配置参数时出错:" + ex.Message };
|
||||
}
|
||||
try
|
||||
{
|
||||
//请求数据
|
||||
using (response = (HttpWebResponse)request.GetResponse())
|
||||
{
|
||||
GetData(item, result);
|
||||
}
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
if (ex.Response != null)
|
||||
{
|
||||
using (response = (HttpWebResponse)ex.Response)
|
||||
{
|
||||
GetData(item, result);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Html = ex.Message;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
result.Html = ex.Message;
|
||||
}
|
||||
if (item.IsToLower) result.Html = result.Html.ToLower();
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据的并解析的方法
|
||||
/// </summary>
|
||||
/// <param name="item"></param>
|
||||
/// <param name="result"></param>
|
||||
private void GetData(HttpItem item, HttpResult result)
|
||||
{
|
||||
if (response == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#region base
|
||||
//获取StatusCode
|
||||
result.StatusCode = response.StatusCode;
|
||||
//获取StatusDescription
|
||||
result.StatusDescription = response.StatusDescription;
|
||||
//获取Headers
|
||||
result.Header = response.Headers;
|
||||
//获取最后访问的URl
|
||||
result.ResponseUri = response.ResponseUri.ToString();
|
||||
//获取CookieCollection
|
||||
if (response.Cookies != null) result.CookieCollection = response.Cookies;
|
||||
//获取set-cookie
|
||||
if (response.Headers["set-cookie"] != null) result.Cookie = response.Headers["set-cookie"];
|
||||
#endregion
|
||||
|
||||
#region byte
|
||||
//处理网页Byte
|
||||
byte[] ResponseByte = GetByte();
|
||||
#endregion
|
||||
|
||||
#region Html
|
||||
if (ResponseByte != null && ResponseByte.Length > 0)
|
||||
{
|
||||
//设置编码
|
||||
SetEncoding(item, result, ResponseByte);
|
||||
//得到返回的HTML
|
||||
result.Html = encoding.GetString(ResponseByte);
|
||||
}
|
||||
else
|
||||
{
|
||||
//没有返回任何Html代码
|
||||
result.Html = string.Empty;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置编码
|
||||
/// </summary>
|
||||
/// <param name="item">HttpItem</param>
|
||||
/// <param name="result">HttpResult</param>
|
||||
/// <param name="ResponseByte">byte[]</param>
|
||||
private void SetEncoding(HttpItem item, HttpResult result, byte[] ResponseByte)
|
||||
{
|
||||
//是否返回Byte类型数据
|
||||
if (item.ResultType == ResultType.Byte) result.ResultByte = ResponseByte;
|
||||
//从这里开始我们要无视编码了
|
||||
if (encoding == null)
|
||||
{
|
||||
string c = string.Empty;
|
||||
var charset= result.Header["Content-Type"];
|
||||
if (charset != null)
|
||||
{
|
||||
int pos = charset.IndexOf("charset=", StringComparison.OrdinalIgnoreCase);
|
||||
if(pos>0)
|
||||
{
|
||||
c = charset.Substring(pos + "charset=".Length);
|
||||
}
|
||||
//System.IO.File.AppendAllText(@"G:\程序开发源码\QO流程管理\Bin\Debug\1122.txt", charset+" "+ c);
|
||||
}
|
||||
if(c== string.Empty)
|
||||
{
|
||||
Match meta = Regex.Match(Encoding.Default.GetString(ResponseByte), "<meta[^<]*charset=([^<]*)[\"']", RegexOptions.IgnoreCase);
|
||||
if (meta != null && meta.Groups.Count > 0)
|
||||
{
|
||||
c = meta.Groups[1].Value.ToLower().Trim();
|
||||
}
|
||||
}
|
||||
if (c == string.Empty)
|
||||
{
|
||||
if(item.URL.ToLower().Replace("https://","").IndexOf("http://api.dataoke.com/index.php")==0)
|
||||
{
|
||||
c = "gb2312";
|
||||
}
|
||||
}
|
||||
if (c.Length > 2)
|
||||
{
|
||||
try
|
||||
{
|
||||
encoding = Encoding.GetEncoding(c.Replace("\"", string.Empty).Replace("'", "").Replace(";", "").Replace("iso-8859-1", "gbk").Trim());
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (string.IsNullOrEmpty(response.CharacterSet))
|
||||
{
|
||||
encoding = Encoding.UTF8;
|
||||
}
|
||||
else
|
||||
{
|
||||
encoding = Encoding.GetEncoding(response.CharacterSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(response.CharacterSet))
|
||||
{
|
||||
encoding = Encoding.UTF8;
|
||||
}
|
||||
else
|
||||
{
|
||||
encoding = Encoding.GetEncoding(response.CharacterSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 提取网页Byte
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private byte[] GetByte()
|
||||
{
|
||||
byte[] ResponseByte = null;
|
||||
using (MemoryStream _stream = new MemoryStream())
|
||||
{
|
||||
//GZIIP处理
|
||||
if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
//开始读取流并设置编码方式
|
||||
new GZipStream(response.GetResponseStream(), CompressionMode.Decompress).CopyTo(_stream, 10240);
|
||||
}
|
||||
else
|
||||
{
|
||||
//开始读取流并设置编码方式
|
||||
response.GetResponseStream().CopyTo(_stream, 10240);
|
||||
}
|
||||
//获取Byte
|
||||
ResponseByte = _stream.ToArray();
|
||||
}
|
||||
return ResponseByte;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region SetRequest
|
||||
|
||||
/// <summary>
|
||||
/// 为请求准备参数
|
||||
/// </summary>
|
||||
///<param name="item">参数列表</param>
|
||||
private void SetRequest(HttpItem item)
|
||||
{
|
||||
|
||||
// 验证证书
|
||||
SetCer(item);
|
||||
if (item.IPEndPoint != null)
|
||||
{
|
||||
_IPEndPoint = item.IPEndPoint;
|
||||
//设置本地的出口ip和端口
|
||||
request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
|
||||
}
|
||||
//设置Header参数
|
||||
if (item.Header != null && item.Header.Count > 0) foreach (string key in item.Header.AllKeys)
|
||||
{
|
||||
request.Headers.Add(key, item.Header[key]);
|
||||
}
|
||||
// 设置代理
|
||||
SetProxy(item);
|
||||
if (item.ProtocolVersion != null) request.ProtocolVersion = item.ProtocolVersion;
|
||||
request.ServicePoint.Expect100Continue = item.Expect100Continue;
|
||||
//请求方式Get或者Post
|
||||
request.Method = item.Method;
|
||||
request.Timeout = item.Timeout;
|
||||
request.KeepAlive = item.KeepAlive;
|
||||
request.ReadWriteTimeout = item.ReadWriteTimeout;
|
||||
if (!string.IsNullOrWhiteSpace(item.Host))
|
||||
{
|
||||
request.Host = item.Host;
|
||||
}
|
||||
if (item.IfModifiedSince != null) request.IfModifiedSince = Convert.ToDateTime(item.IfModifiedSince);
|
||||
//Accept
|
||||
request.Accept = item.Accept;
|
||||
//ContentType返回类型
|
||||
request.ContentType = item.ContentType;
|
||||
//UserAgent客户端的访问类型,包括浏览器版本和操作系统信息
|
||||
request.UserAgent = item.UserAgent;
|
||||
// 编码
|
||||
encoding = item.Encoding;
|
||||
//设置安全凭证
|
||||
request.Credentials = item.ICredentials;
|
||||
//设置Cookie
|
||||
SetCookie(item);
|
||||
//来源地址
|
||||
request.Referer = item.Referer;
|
||||
//是否执行跳转功能
|
||||
request.AllowAutoRedirect = item.Allowautoredirect;
|
||||
if (item.MaximumAutomaticRedirections > 0)
|
||||
{
|
||||
request.MaximumAutomaticRedirections = item.MaximumAutomaticRedirections;
|
||||
}
|
||||
//设置Post数据
|
||||
SetPostData(item);
|
||||
//设置最大连接
|
||||
if (item.Connectionlimit > 0) request.ServicePoint.ConnectionLimit = item.Connectionlimit;
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置证书
|
||||
/// </summary>
|
||||
/// <param name="item"></param>
|
||||
private void SetCer(HttpItem item)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(item.CerPath))
|
||||
{
|
||||
//这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。
|
||||
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
|
||||
//初始化对像,并设置请求的URL地址
|
||||
request = (HttpWebRequest)WebRequest.Create(item.URL);
|
||||
SetCerList(item);
|
||||
//将证书添加到请求里
|
||||
request.ClientCertificates.Add(new X509Certificate(item.CerPath));
|
||||
}
|
||||
else
|
||||
{
|
||||
//初始化对像,并设置请求的URL地址
|
||||
request = (HttpWebRequest)WebRequest.Create(item.URL);
|
||||
SetCerList(item);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置多个证书
|
||||
/// </summary>
|
||||
/// <param name="item"></param>
|
||||
private void SetCerList(HttpItem item)
|
||||
{
|
||||
if (item.ClentCertificates != null && item.ClentCertificates.Count > 0)
|
||||
{
|
||||
foreach (X509Certificate c in item.ClentCertificates)
|
||||
{
|
||||
request.ClientCertificates.Add(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置Cookie
|
||||
/// </summary>
|
||||
/// <param name="item">Http参数</param>
|
||||
private void SetCookie(HttpItem item)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(item.Cookie)) request.Headers[HttpRequestHeader.Cookie] = item.Cookie;
|
||||
//设置CookieCollection
|
||||
if (item.ResultCookieType == ResultCookieType.CookieCollection)
|
||||
{
|
||||
request.CookieContainer = new CookieContainer();
|
||||
if (item.CookieCollection != null && item.CookieCollection.Count > 0)
|
||||
request.CookieContainer.Add(item.CookieCollection);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置Post数据
|
||||
/// </summary>
|
||||
/// <param name="item">Http参数</param>
|
||||
private void SetPostData(HttpItem item)
|
||||
{
|
||||
//验证在得到结果时是否有传入数据
|
||||
if (!request.Method.Trim().ToLower().Contains("get"))
|
||||
{
|
||||
if (item.PostEncoding != null)
|
||||
{
|
||||
postencoding = item.PostEncoding;
|
||||
}
|
||||
byte[] buffer = null;
|
||||
//写入Byte类型
|
||||
if (item.PostDataType == PostDataType.Byte && item.PostdataByte != null && item.PostdataByte.Length > 0)
|
||||
{
|
||||
//验证在得到结果时是否有传入数据
|
||||
buffer = item.PostdataByte;
|
||||
}//写入文件
|
||||
else if (item.PostDataType == PostDataType.FilePath && !string.IsNullOrWhiteSpace(item.Postdata))
|
||||
{
|
||||
StreamReader r = new StreamReader(item.Postdata, postencoding);
|
||||
buffer = postencoding.GetBytes(r.ReadToEnd());
|
||||
r.Close();
|
||||
} //写入字符串
|
||||
else if (!string.IsNullOrWhiteSpace(item.Postdata))
|
||||
{
|
||||
buffer = postencoding.GetBytes(item.Postdata);
|
||||
}
|
||||
if (buffer != null)
|
||||
{
|
||||
request.ContentLength = buffer.Length;
|
||||
request.GetRequestStream().Write(buffer, 0, buffer.Length);
|
||||
}
|
||||
else
|
||||
{
|
||||
request.ContentLength = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置代理
|
||||
/// </summary>
|
||||
/// <param name="item">参数对象</param>
|
||||
private void SetProxy(HttpItem item)
|
||||
{
|
||||
bool isIeProxy = false;
|
||||
if (!string.IsNullOrWhiteSpace(item.ProxyIp))
|
||||
{
|
||||
isIeProxy = item.ProxyIp.ToLower().Contains("ieproxy");
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(item.ProxyIp) && !isIeProxy)
|
||||
{
|
||||
//设置代理服务器
|
||||
if (item.ProxyIp.Contains(":"))
|
||||
{
|
||||
string[] plist = item.ProxyIp.Split(':');
|
||||
WebProxy myProxy = new WebProxy(plist[0].Trim(), Convert.ToInt32(plist[1].Trim()))
|
||||
{
|
||||
//建议连接
|
||||
Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd)
|
||||
};
|
||||
//给当前请求对象
|
||||
request.Proxy = myProxy;
|
||||
}
|
||||
else
|
||||
{
|
||||
WebProxy myProxy = new WebProxy(item.ProxyIp, false)
|
||||
{
|
||||
//建议连接
|
||||
Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd)
|
||||
};
|
||||
//给当前请求对象
|
||||
request.Proxy = myProxy;
|
||||
}
|
||||
}
|
||||
else if (isIeProxy)
|
||||
{
|
||||
//设置为IE代理
|
||||
}
|
||||
else
|
||||
{
|
||||
request.Proxy = item.WebProxy;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region private main
|
||||
/// <summary>
|
||||
/// 回调验证证书问题
|
||||
/// </summary>
|
||||
/// <param name="sender">流对象</param>
|
||||
/// <param name="certificate">证书</param>
|
||||
/// <param name="chain">X509Chain</param>
|
||||
/// <param name="errors">SslPolicyErrors</param>
|
||||
/// <returns>bool</returns>
|
||||
private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }
|
||||
|
||||
/// <summary>
|
||||
/// 通过设置这个属性,可以在发出连接的时候绑定客户端发出连接所使用的IP地址。
|
||||
/// </summary>
|
||||
/// <param name="servicePoint"></param>
|
||||
/// <param name="remoteEndPoint"></param>
|
||||
/// <param name="retryCount"></param>
|
||||
/// <returns></returns>
|
||||
private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
|
||||
{
|
||||
return _IPEndPoint;//端口号
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
#region public calss
|
||||
/// <summary>
|
||||
/// Http请求参考类
|
||||
/// </summary>
|
||||
public class HttpItem
|
||||
{
|
||||
/// <summary>
|
||||
/// 请求URL必须填写
|
||||
/// </summary>
|
||||
public string URL { get; set; }
|
||||
string _Method = "GET";
|
||||
/// <summary>
|
||||
/// 请求方式默认为GET方式,当为POST方式时必须设置Postdata的值
|
||||
/// </summary>
|
||||
public string Method
|
||||
{
|
||||
get { return _Method; }
|
||||
set { _Method = value; }
|
||||
}
|
||||
int _Timeout = 100000;
|
||||
/// <summary>
|
||||
/// 默认请求超时时间
|
||||
/// </summary>
|
||||
public int Timeout
|
||||
{
|
||||
get { return _Timeout; }
|
||||
set { _Timeout = value; }
|
||||
}
|
||||
int _ReadWriteTimeout = 30000;
|
||||
/// <summary>
|
||||
/// 默认写入Post数据超时间
|
||||
/// </summary>
|
||||
public int ReadWriteTimeout
|
||||
{
|
||||
get { return _ReadWriteTimeout; }
|
||||
set { _ReadWriteTimeout = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置Host的标头信息
|
||||
/// </summary>
|
||||
public string Host { get; set; }
|
||||
Boolean _KeepAlive = true;
|
||||
/// <summary>
|
||||
/// 获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接默认为true。
|
||||
/// </summary>
|
||||
public Boolean KeepAlive
|
||||
{
|
||||
get { return _KeepAlive; }
|
||||
set { _KeepAlive = value; }
|
||||
}
|
||||
string _Accept = "text/html, application/xhtml+xml, */*";
|
||||
/// <summary>
|
||||
/// 请求标头值 默认为text/html, application/xhtml+xml, */*
|
||||
/// </summary>
|
||||
public string Accept
|
||||
{
|
||||
get { return _Accept; }
|
||||
set { _Accept = value; }
|
||||
}
|
||||
string _ContentType = "text/html";
|
||||
/// <summary>
|
||||
/// 请求返回类型默认 text/html
|
||||
/// </summary>
|
||||
public string ContentType
|
||||
{
|
||||
get { return _ContentType; }
|
||||
set { _ContentType = value; }
|
||||
}
|
||||
string _UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
|
||||
/// <summary>
|
||||
/// 客户端访问信息默认Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
|
||||
/// </summary>
|
||||
public string UserAgent
|
||||
{
|
||||
get { return _UserAgent; }
|
||||
set { _UserAgent = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 返回数据编码默认为NUll,可以自动识别,一般为utf-8,gbk,gb2312
|
||||
/// </summary>
|
||||
public Encoding Encoding { get; set; }
|
||||
private PostDataType _PostDataType = PostDataType.String;
|
||||
/// <summary>
|
||||
/// Post的数据类型
|
||||
/// </summary>
|
||||
public PostDataType PostDataType
|
||||
{
|
||||
get { return _PostDataType; }
|
||||
set { _PostDataType = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// Post请求时要发送的字符串Post数据
|
||||
/// </summary>
|
||||
public string Postdata { get; set; }
|
||||
/// <summary>
|
||||
/// Post请求时要发送的Byte类型的Post数据
|
||||
/// </summary>
|
||||
public byte[] PostdataByte { get; set; }
|
||||
/// <summary>
|
||||
/// Cookie对象集合
|
||||
/// </summary>
|
||||
public CookieCollection CookieCollection { get; set; }
|
||||
/// <summary>
|
||||
/// 请求时的Cookie
|
||||
/// </summary>
|
||||
public string Cookie { get; set; }
|
||||
/// <summary>
|
||||
/// 来源地址,上次访问地址
|
||||
/// </summary>
|
||||
public string Referer { get; set; }
|
||||
/// <summary>
|
||||
/// 证书绝对路径
|
||||
/// </summary>
|
||||
public string CerPath { get; set; }
|
||||
/// <summary>
|
||||
/// 设置代理对象,不想使用IE默认配置就设置为Null,而且不要设置ProxyIp
|
||||
/// </summary>
|
||||
public WebProxy WebProxy { get; set; }
|
||||
private Boolean isToLower = false;
|
||||
/// <summary>
|
||||
/// 是否设置为全文小写,默认为不转化
|
||||
/// </summary>
|
||||
public Boolean IsToLower
|
||||
{
|
||||
get { return isToLower; }
|
||||
set { isToLower = value; }
|
||||
}
|
||||
private Boolean allowautoredirect = false;
|
||||
/// <summary>
|
||||
/// 支持跳转页面,查询结果将是跳转后的页面,默认是不跳转
|
||||
/// </summary>
|
||||
public Boolean Allowautoredirect
|
||||
{
|
||||
get { return allowautoredirect; }
|
||||
set { allowautoredirect = value; }
|
||||
}
|
||||
private int connectionlimit = 1024;
|
||||
/// <summary>
|
||||
/// 最大连接数
|
||||
/// </summary>
|
||||
public int Connectionlimit
|
||||
{
|
||||
get { return connectionlimit; }
|
||||
set { connectionlimit = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 代理Proxy 服务器用户名
|
||||
/// </summary>
|
||||
public string ProxyUserName { get; set; }
|
||||
/// <summary>
|
||||
/// 代理 服务器密码
|
||||
/// </summary>
|
||||
public string ProxyPwd { get; set; }
|
||||
/// <summary>
|
||||
/// 代理 服务IP,如果要使用IE代理就设置为ieproxy
|
||||
/// </summary>
|
||||
public string ProxyIp { get; set; }
|
||||
private ResultType resulttype = ResultType.String;
|
||||
/// <summary>
|
||||
/// 设置返回类型String和Byte
|
||||
/// </summary>
|
||||
public ResultType ResultType
|
||||
{
|
||||
get { return resulttype; }
|
||||
set { resulttype = value; }
|
||||
}
|
||||
private WebHeaderCollection header = new WebHeaderCollection();
|
||||
/// <summary>
|
||||
/// header对象
|
||||
/// </summary>
|
||||
public WebHeaderCollection Header
|
||||
{
|
||||
get { return header; }
|
||||
set { header = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取或设置用于请求的 HTTP 版本。返回结果:用于请求的 HTTP 版本。默认为 System.Net.HttpVersion.Version11。
|
||||
/// </summary>
|
||||
public Version ProtocolVersion { get; set; }
|
||||
private Boolean _expect100continue = false;
|
||||
/// <summary>
|
||||
/// 获取或设置一个 System.Boolean 值,该值确定是否使用 100-Continue 行为。如果 POST 请求需要 100-Continue 响应,则为 true;否则为 false。默认值为 true。
|
||||
/// </summary>
|
||||
public Boolean Expect100Continue
|
||||
{
|
||||
get { return _expect100continue; }
|
||||
set { _expect100continue = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置509证书集合
|
||||
/// </summary>
|
||||
public X509CertificateCollection ClentCertificates { get; set; }
|
||||
/// <summary>
|
||||
/// 设置或获取Post参数编码,默认的为Default编码
|
||||
/// </summary>
|
||||
public Encoding PostEncoding { get; set; }
|
||||
private ResultCookieType _ResultCookieType = ResultCookieType.String;
|
||||
/// <summary>
|
||||
/// Cookie返回类型,默认的是只返回字符串类型
|
||||
/// </summary>
|
||||
public ResultCookieType ResultCookieType
|
||||
{
|
||||
get { return _ResultCookieType; }
|
||||
set { _ResultCookieType = value; }
|
||||
}
|
||||
private ICredentials _ICredentials = CredentialCache.DefaultCredentials;
|
||||
/// <summary>
|
||||
/// 获取或设置请求的身份验证信息。
|
||||
/// </summary>
|
||||
public ICredentials ICredentials
|
||||
{
|
||||
get { return _ICredentials; }
|
||||
set { _ICredentials = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置请求将跟随的重定向的最大数目
|
||||
/// </summary>
|
||||
public int MaximumAutomaticRedirections { get; set; }
|
||||
private DateTime? _IfModifiedSince = null;
|
||||
/// <summary>
|
||||
/// 获取和设置IfModifiedSince,默认为当前日期和时间
|
||||
/// </summary>
|
||||
public DateTime? IfModifiedSince
|
||||
{
|
||||
get { return _IfModifiedSince; }
|
||||
set { _IfModifiedSince = value; }
|
||||
}
|
||||
#region ip-port
|
||||
private IPEndPoint _IPEndPoint = null;
|
||||
/// <summary>
|
||||
/// 设置本地的出口ip和端口
|
||||
/// </summary>]
|
||||
/// <example>
|
||||
///item.IPEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.1"),80);
|
||||
/// </example>
|
||||
public IPEndPoint IPEndPoint
|
||||
{
|
||||
get { return _IPEndPoint; }
|
||||
set { _IPEndPoint = value; }
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
/// <summary>
|
||||
/// Http返回参数类
|
||||
/// </summary>
|
||||
public class HttpResult
|
||||
{
|
||||
/// <summary>
|
||||
/// Http请求返回的Cookie
|
||||
/// </summary>
|
||||
public string Cookie { get; set; }
|
||||
/// <summary>
|
||||
/// Cookie对象集合
|
||||
/// </summary>
|
||||
public CookieCollection CookieCollection { get; set; }
|
||||
private string _html = string.Empty;
|
||||
/// <summary>
|
||||
/// 返回的String类型数据 只有ResultType.String时才返回数据,其它情况为空
|
||||
/// </summary>
|
||||
public string Html
|
||||
{
|
||||
get { return _html; }
|
||||
set { _html = value; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 返回的Byte数组 只有ResultType.Byte时才返回数据,其它情况为空
|
||||
/// </summary>
|
||||
public byte[] ResultByte { get; set; }
|
||||
/// <summary>
|
||||
/// header对象
|
||||
/// </summary>
|
||||
public WebHeaderCollection Header { get; set; }
|
||||
/// <summary>
|
||||
/// 返回状态说明
|
||||
/// </summary>
|
||||
public string StatusDescription { get; set; }
|
||||
/// <summary>
|
||||
/// 返回状态码,默认为OK
|
||||
/// </summary>
|
||||
public HttpStatusCode StatusCode { get; set; }
|
||||
/// <summary>
|
||||
/// 最后访问的URl
|
||||
/// </summary>
|
||||
public string ResponseUri { get; set; }
|
||||
/// <summary>
|
||||
/// 获取重定向的URl
|
||||
/// </summary>
|
||||
public string RedirectUrl
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Header != null && Header.Count > 0)
|
||||
{
|
||||
if (Header.AllKeys.Any(k => k.ToLower().Contains("location")))
|
||||
{
|
||||
string baseurl = Header["location"].ToString().Trim();
|
||||
string locationurl = baseurl.ToLower();
|
||||
if (!string.IsNullOrWhiteSpace(locationurl))
|
||||
{
|
||||
bool b = locationurl.StartsWith("http://") || locationurl.StartsWith("https://");
|
||||
if (!b)
|
||||
{
|
||||
baseurl = new Uri(new Uri(ResponseUri), baseurl).AbsoluteUri;
|
||||
}
|
||||
}
|
||||
return baseurl;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 返回类型
|
||||
/// </summary>
|
||||
public enum ResultType
|
||||
{
|
||||
/// <summary>
|
||||
/// 表示只返回字符串 只有Html有数据
|
||||
/// </summary>
|
||||
String,
|
||||
/// <summary>
|
||||
/// 表示返回字符串和字节流 ResultByte和Html都有数据返回
|
||||
/// </summary>
|
||||
Byte
|
||||
}
|
||||
/// <summary>
|
||||
/// Post的数据格式默认为string
|
||||
/// </summary>
|
||||
public enum PostDataType
|
||||
{
|
||||
/// <summary>
|
||||
/// 字符串类型,这时编码Encoding可不设置
|
||||
/// </summary>
|
||||
String,
|
||||
/// <summary>
|
||||
/// Byte类型,需要设置PostdataByte参数的值编码Encoding可设置为空
|
||||
/// </summary>
|
||||
Byte,
|
||||
/// <summary>
|
||||
/// 传文件,Postdata必须设置为文件的绝对路径,必须设置Encoding的值
|
||||
/// </summary>
|
||||
FilePath
|
||||
}
|
||||
/// <summary>
|
||||
/// Cookie返回类型
|
||||
/// </summary>
|
||||
public enum ResultCookieType
|
||||
{
|
||||
/// <summary>
|
||||
/// 只返回字符串类型的Cookie
|
||||
/// </summary>
|
||||
String,
|
||||
/// <summary>
|
||||
/// CookieCollection格式的Cookie集合同时也返回String类型的cookie
|
||||
/// </summary>
|
||||
CookieCollection
|
||||
}
|
||||
#endregion
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 有关程序集的一般信息由以下
|
||||
// 控制。更改这些特性值可修改
|
||||
// 与程序集关联的信息。
|
||||
[assembly: AssemblyTitle("RyWeb")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("RyWeb")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// 将 ComVisible 设置为 false 会使此程序集中的类型
|
||||
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
|
||||
//请将此类型的 ComVisible 特性设置为 true。
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
|
||||
[assembly: Guid("e64caa45-23b4-4417-b353-192beb675825")]
|
||||
|
||||
// 程序集的版本信息由下列四个值组成:
|
||||
//
|
||||
// 主版本
|
||||
// 次版本
|
||||
// 生成号
|
||||
// 修订号
|
||||
//
|
||||
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
||||
//通过使用 "*",如下所示:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.2107.0101")]
|
||||
[assembly: AssemblyFileVersion("3.0.2107.0101")]
|
|
@ -1,293 +0,0 @@
|
|||
using DotNet4.Utilities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace RyWeb
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class QuickWeb
|
||||
{
|
||||
/// <summary>
|
||||
/// 以post方式获取网页源码
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="post"></param>
|
||||
/// <param name="cookie"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult Post(string url, string post, string cookie)
|
||||
{
|
||||
return Post(url, post, "application/x-www-form-urlencoded", cookie);
|
||||
}
|
||||
/// <summary>
|
||||
/// 以post方式提交json内容
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="post"></param>
|
||||
/// <param name="cookie"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult PostJson(string url, string post, string cookie)
|
||||
{
|
||||
return Post(url, post, "application/json", cookie);
|
||||
}
|
||||
/// <summary>
|
||||
/// 以post方式提交json内容
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="post"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult PostJson(string url, string post)
|
||||
{
|
||||
return Post(url, post, "application/json", "");
|
||||
}
|
||||
/// <summary>
|
||||
/// 以post方式获取网页源码
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="post"></param>
|
||||
/// <param name="ContentType"></param>
|
||||
/// <param name="cookie"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult Post(string url, string post,string ContentType, string cookie)
|
||||
{
|
||||
try
|
||||
{
|
||||
HttpHelper t = new HttpHelper();
|
||||
HttpItem m = new HttpItem()
|
||||
{
|
||||
URL = url,
|
||||
Postdata = post,
|
||||
ContentType = ContentType,
|
||||
Method = "POST",
|
||||
Timeout = Timeout,
|
||||
ReadWriteTimeout = Timeout,
|
||||
UserAgent = UserAgent,
|
||||
Referer=Referer
|
||||
};
|
||||
if (cookie.Length > 0)
|
||||
{
|
||||
m.Cookie = cookie;
|
||||
}
|
||||
HttpResult r = t.GetHtml(m);
|
||||
return r;
|
||||
}
|
||||
catch
|
||||
{
|
||||
HttpResult r = new HttpResult();
|
||||
return r;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 以post方式获取网页源码
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="post"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult Post(string url, string post)
|
||||
{
|
||||
return Post(url, post, cookie);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取网址对应的文件大小
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <returns></returns>
|
||||
public long GetSize(string url)
|
||||
{
|
||||
try
|
||||
{
|
||||
HttpHelper t = new HttpHelper();
|
||||
HttpItem m = new HttpItem()
|
||||
{
|
||||
URL = url,
|
||||
Method = "HEAD",
|
||||
Allowautoredirect = true,
|
||||
Cookie = cookie,
|
||||
Timeout = Timeout,
|
||||
ReadWriteTimeout = Timeout,
|
||||
UserAgent = UserAgent,
|
||||
Referer = Referer
|
||||
};
|
||||
HttpResult r = t.GetHtml(m);
|
||||
if (r.StatusCode == System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
return Convert.ToInt64(r.Header["Content-Length"]);
|
||||
}
|
||||
else if (r.StatusCode == System.Net.HttpStatusCode.MethodNotAllowed)
|
||||
{
|
||||
System.Net.ServicePointManager.DefaultConnectionLimit = 512;
|
||||
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
|
||||
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
|
||||
long totalBytes = response.ContentLength;
|
||||
return totalBytes;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string UserAgent
|
||||
{
|
||||
get; set;
|
||||
} = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
|
||||
/// <summary>
|
||||
/// 获取网页源码
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="cookie"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult Get(string url, string cookie)
|
||||
{
|
||||
try
|
||||
{
|
||||
HttpHelper t = new HttpHelper();
|
||||
HttpItem m = new HttpItem()
|
||||
{
|
||||
URL = url,
|
||||
ContentType= "application/x-www-form-urlencoded"
|
||||
};
|
||||
if (cookie.Length>0)
|
||||
{
|
||||
m.Cookie = cookie;
|
||||
}
|
||||
m.UserAgent = UserAgent;
|
||||
m.Allowautoredirect = true;
|
||||
m.Timeout = Timeout;
|
||||
m.ReadWriteTimeout = Timeout;
|
||||
m.Referer = Referer;
|
||||
HttpResult r = t.GetHtml(m);
|
||||
return r;
|
||||
}
|
||||
catch
|
||||
{
|
||||
HttpResult r = new HttpResult()
|
||||
{
|
||||
Html = ""
|
||||
};
|
||||
return r;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取网页源码
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
///<param name="encoding"></param>
|
||||
/// <param name="cookie"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult Get(string url,Encoding encoding, string cookie)
|
||||
{
|
||||
try
|
||||
{
|
||||
HttpHelper t = new HttpHelper();
|
||||
HttpItem m = new HttpItem()
|
||||
{
|
||||
URL = url
|
||||
};
|
||||
if (cookie != "")
|
||||
{
|
||||
m.Cookie = cookie;
|
||||
}
|
||||
m.UserAgent = UserAgent;
|
||||
m.Encoding = encoding;
|
||||
m.Allowautoredirect = true;
|
||||
m.Timeout = Timeout;
|
||||
m.ReadWriteTimeout = Timeout;
|
||||
m.Referer = Referer;
|
||||
HttpResult r = t.GetHtml(m);
|
||||
return r;
|
||||
}
|
||||
catch
|
||||
{
|
||||
HttpResult r = new HttpResult()
|
||||
{
|
||||
Html = ""
|
||||
};
|
||||
return r;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取网页源码
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <returns></returns>
|
||||
public HttpResult Get(string url)
|
||||
{
|
||||
return Get(url, cookie);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string Cookie
|
||||
{
|
||||
get { return cookie; }
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string Referer
|
||||
{
|
||||
get;set;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int Timeout { get; set; } = 10000;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="encode"></param>
|
||||
/// <returns></returns>
|
||||
public string UrlEncode(string str, Encoding encode)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
byte[] byStr = encode.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)
|
||||
for (int i = 0; i < byStr.Length; i++)
|
||||
{
|
||||
var item = Convert.ToString(byStr[i], 16);
|
||||
if (item.Length == 1) { item = "0" + item; }
|
||||
sb.Append(@"%" + item);
|
||||
}
|
||||
return (sb.ToString());
|
||||
}
|
||||
private string cookie = "";
|
||||
/// <summary>
|
||||
/// 将相对网址转换成绝对网址
|
||||
/// </summary>
|
||||
/// <param name="rel_url">相对网址</param>
|
||||
/// <param name="cur_pageUrl">当前页面地址</param>
|
||||
/// <returns>转换后的绝对网址</returns>
|
||||
public string ConvertUrl(string rel_url, string cur_pageUrl)
|
||||
{
|
||||
if (rel_url == "")
|
||||
{
|
||||
return cur_pageUrl;
|
||||
}
|
||||
try
|
||||
{
|
||||
string _rel_url = rel_url;
|
||||
if (_rel_url.IndexOf("//")==0)
|
||||
{
|
||||
int iPos = cur_pageUrl.IndexOf(":");
|
||||
if (iPos > 0)
|
||||
{
|
||||
_rel_url = cur_pageUrl.Substring(0,iPos)+ ":" + _rel_url;
|
||||
}
|
||||
}
|
||||
Uri baseUri = new Uri(cur_pageUrl); //
|
||||
Uri absoluteUri = new Uri(baseUri, _rel_url);//相对绝对路径都在这里转 这里的urlx ="../test.html"
|
||||
return absoluteUri.AbsoluteUri.Replace("&", "&");//
|
||||
}
|
||||
catch { return rel_url; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{E64CAA45-23B4-4417-B353-192BEB675825}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>RyWeb</RootNamespace>
|
||||
<AssemblyName>RyWeb</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\Bin\Debug\CommonControls\.NET4\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\..\Bin\Debug\CommonControls\.NET4\RyWeb.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\Bin\Release\CommonControls\.NET4\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\..\Bin\Release\CommonControls\.NET4\RyWeb.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="HttpHelper.cs" />
|
||||
<Compile Include="QuickWeb.cs" />
|
||||
<Compile Include="WebDecode.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectView>ShowAllFiles</ProjectView>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,467 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace RyWeb
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class UrlDecoder
|
||||
{
|
||||
// Fields
|
||||
private int _bufferSize;
|
||||
private byte[] _byteBuffer;
|
||||
private char[] _charBuffer;
|
||||
private Encoding _encoding;
|
||||
private int _numBytes;
|
||||
private int _numChars;
|
||||
internal UrlDecoder(int bufferSize, Encoding encoding)
|
||||
{
|
||||
this._bufferSize = bufferSize;
|
||||
this._encoding = encoding;
|
||||
this._charBuffer = new char[bufferSize];
|
||||
}
|
||||
internal void AddByte(byte b)
|
||||
{
|
||||
if (this._byteBuffer == null)
|
||||
{
|
||||
this._byteBuffer = new byte[this._bufferSize];
|
||||
}
|
||||
this._byteBuffer[this._numBytes++] = b;
|
||||
}
|
||||
internal void AddChar(char ch)
|
||||
{
|
||||
if (this._numBytes > 0)
|
||||
{
|
||||
this.FlushBytes();
|
||||
}
|
||||
this._charBuffer[this._numChars++] = ch;
|
||||
}
|
||||
internal string GetString()
|
||||
{
|
||||
if (this._numBytes > 0)
|
||||
{
|
||||
this.FlushBytes();
|
||||
}
|
||||
if (this._numChars > 0)
|
||||
{
|
||||
return new string(this._charBuffer, 0, this._numChars);
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
private void FlushBytes()
|
||||
{
|
||||
if (this._numBytes > 0)
|
||||
{
|
||||
this._numChars += this._encoding.GetChars(this._byteBuffer, 0, this._numBytes, this._charBuffer, this._numChars);
|
||||
this._numBytes = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class WebDecode
|
||||
{
|
||||
private static int HexToInt(char h)
|
||||
{
|
||||
if ((h >= '0') && (h <= '9'))
|
||||
{
|
||||
return (h - '0');
|
||||
}
|
||||
if ((h >= 'a') && (h <= 'f'))
|
||||
{
|
||||
return ((h - 'a') + 10);
|
||||
}
|
||||
if ((h >= 'A') && (h <= 'F'))
|
||||
{
|
||||
return ((h - 'A') + 10);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
private static string UrlDecodeStringFromStringInternal(string s, Encoding e)
|
||||
{
|
||||
int length = s.Length;
|
||||
UrlDecoder decoder = new UrlDecoder(length, e);
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
char ch = s[i];
|
||||
if (ch == '+')
|
||||
{
|
||||
ch = ' ';
|
||||
}
|
||||
else if ((ch == '%') && (i < (length - 2)))
|
||||
{
|
||||
if ((s[i + 1] == 'u') && (i < (length - 5)))
|
||||
{
|
||||
int num3 = HexToInt(s[i + 2]);
|
||||
int num4 = HexToInt(s[i + 3]);
|
||||
int num5 = HexToInt(s[i + 4]);
|
||||
int num6 = HexToInt(s[i + 5]);
|
||||
if (((num3 < 0) || (num4 < 0)) || ((num5 < 0) || (num6 < 0)))
|
||||
{
|
||||
goto Label_0106;
|
||||
}
|
||||
ch = (char)((((num3 << 12) | (num4 << 8)) | (num5 << 4)) | num6);
|
||||
i += 5;
|
||||
decoder.AddChar(ch);
|
||||
continue;
|
||||
}
|
||||
int num7 = HexToInt(s[i + 1]);
|
||||
int num8 = HexToInt(s[i + 2]);
|
||||
if ((num7 >= 0) && (num8 >= 0))
|
||||
{
|
||||
byte b = (byte)((num7 << 4) | num8);
|
||||
i += 2;
|
||||
decoder.AddByte(b);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Label_0106:
|
||||
if ((ch & 0xff80) == 0)
|
||||
{
|
||||
decoder.AddByte((byte)ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
decoder.AddChar(ch);
|
||||
}
|
||||
}
|
||||
return decoder.GetString();
|
||||
}
|
||||
/// <summary>
|
||||
/// url解密
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlDecode(string str, Encoding e)
|
||||
{
|
||||
if (str == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return UrlDecodeStringFromStringInternal(str, e);
|
||||
}
|
||||
/// <summary>
|
||||
/// url解密,按UTF8方式解密
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlDecode(string s)
|
||||
{
|
||||
Encoding e = Encoding.UTF8;
|
||||
return UrlDecode(s, e);
|
||||
}
|
||||
/// <summary>
|
||||
/// Url加密
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="encode"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlEncode(string str, Encoding encode)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
byte[] byStr = encode.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)
|
||||
for (int i = 0; i < byStr.Length; i++)
|
||||
{
|
||||
sb.Append(@"%" + Convert.ToString(byStr[i], 16));
|
||||
}
|
||||
return (sb.ToString().Replace(" ", "+"));
|
||||
}
|
||||
/// <summary>
|
||||
/// Url加密,按UTF8方式加密
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlEncode(string str)
|
||||
{
|
||||
return UrlEncodeNonAscii(str,Encoding.UTF8).Replace(" ", "+");
|
||||
}
|
||||
private static int HexDigit(char c)
|
||||
{
|
||||
if ((c >= '0') && (c <= '9'))
|
||||
{
|
||||
return (c - '0');
|
||||
}
|
||||
if ((c >= 'A') && (c <= 'F'))
|
||||
{
|
||||
return (('\n' + c) - 0x41);
|
||||
}
|
||||
if ((c >= 'a') && (c <= 'f'))
|
||||
{
|
||||
return (('\n' + c) - 0x61);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
/// <summary>
|
||||
/// 解密
|
||||
/// </summary>
|
||||
/// <param name="string"></param>
|
||||
/// <returns></returns>
|
||||
public static string Unescape(object @string)
|
||||
{
|
||||
string str = Convert.ToString(@string);
|
||||
int length = str.Length;
|
||||
StringBuilder builder = new StringBuilder(length);
|
||||
int num6 = -1;
|
||||
while (++num6 < length)
|
||||
{
|
||||
char ch = str[num6];
|
||||
if (ch == '%')
|
||||
{
|
||||
int num2;
|
||||
int num3;
|
||||
int num4;
|
||||
int num5;
|
||||
if (((((num6 + 5) < length) && (str[num6 + 1] == 'u')) && (((num2 = HexDigit(str[num6 + 2])) != -1) && ((num3 = HexDigit(str[num6 + 3])) != -1))) && (((num4 = HexDigit(str[num6 + 4])) != -1) && ((num5 = HexDigit(str[num6 + 5])) != -1)))
|
||||
{
|
||||
ch = (char)((((num2 << 12) + (num3 << 8)) + (num4 << 4)) + num5);
|
||||
num6 += 5;
|
||||
}
|
||||
else if ((((num6 + 2) < length) && ((num2 = HexDigit(str[num6 + 1])) != -1)) && ((num3 = HexDigit(str[num6 + 2])) != -1))
|
||||
{
|
||||
ch = (char)((num2 << 4) + num3);
|
||||
num6 += 2;
|
||||
}
|
||||
}
|
||||
builder.Append(ch);
|
||||
}
|
||||
return builder.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
/// 加密
|
||||
/// </summary>
|
||||
/// <param name="string"></param>
|
||||
/// <returns></returns>
|
||||
public static string Escape(object @string)
|
||||
{
|
||||
string str = Convert.ToString(@string);
|
||||
string str2 = "0123456789ABCDEF";
|
||||
int length = str.Length;
|
||||
StringBuilder builder = new StringBuilder(length * 2);
|
||||
int num3 = -1;
|
||||
while (++num3 < length)
|
||||
{
|
||||
char ch = str[num3];
|
||||
int num2 = ch;
|
||||
if ((((0x41 > num2) || (num2 > 90)) && ((0x61 > num2) || (num2 > 0x7a))) && ((0x30 > num2) || (num2 > 0x39)))
|
||||
{
|
||||
switch (ch)
|
||||
{
|
||||
case '@':
|
||||
case '*':
|
||||
case '_':
|
||||
case '+':
|
||||
case '-':
|
||||
case '.':
|
||||
case '/':
|
||||
goto Label_0125;
|
||||
}
|
||||
builder.Append('%');
|
||||
if (num2 < 0x100)
|
||||
{
|
||||
builder.Append(str2[num2 / 0x10]);
|
||||
ch = str2[num2 % 0x10];
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.Append('u');
|
||||
builder.Append(str2[(num2 >> 12) % 0x10]);
|
||||
builder.Append(str2[(num2 >> 8) % 0x10]);
|
||||
builder.Append(str2[(num2 >> 4) % 0x10]);
|
||||
ch = str2[num2 % 0x10];
|
||||
}
|
||||
}
|
||||
Label_0125:
|
||||
builder.Append(ch);
|
||||
}
|
||||
return builder.ToString();
|
||||
}
|
||||
private static bool ValidateUrlEncodingParameters(byte[] bytes, int offset, int count)
|
||||
{
|
||||
if ((bytes == null) && (count == 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (bytes == null)
|
||||
{
|
||||
throw new ArgumentNullException("bytes");
|
||||
}
|
||||
if ((offset < 0) || (offset > bytes.Length))
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("offset");
|
||||
}
|
||||
if ((count < 0) || ((offset + count) > bytes.Length))
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("count");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private static bool IsNonAsciiByte(byte b)
|
||||
{
|
||||
if (b < 0x7f)
|
||||
{
|
||||
return (b < 0x20);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="bytes"></param>
|
||||
/// <param name="offset"></param>
|
||||
/// <param name="count"></param>
|
||||
/// <param name="alwaysCreateNewReturnValue"></param>
|
||||
/// <returns></returns>
|
||||
public static byte[] UrlEncodeNonAscii(byte[] bytes, int offset, int count, bool alwaysCreateNewReturnValue)
|
||||
{
|
||||
if (!ValidateUrlEncodingParameters(bytes, offset, count))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
int num = 0;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (IsNonAsciiByte(bytes[offset + i]))
|
||||
{
|
||||
num++;
|
||||
}
|
||||
}
|
||||
if (!alwaysCreateNewReturnValue && (num == 0))
|
||||
{
|
||||
return bytes;
|
||||
}
|
||||
byte[] buffer = new byte[count + (num * 2)];
|
||||
int num3 = 0;
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
byte b = bytes[offset + j];
|
||||
if (IsNonAsciiByte(b))
|
||||
{
|
||||
buffer[num3++] = 0x25;
|
||||
buffer[num3++] = (byte)IntToHex((b >> 4) & 15);
|
||||
buffer[num3++] = (byte)IntToHex(b & 15);
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer[num3++] = b;
|
||||
}
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlEncodeNonAscii(string str, Encoding e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(str))
|
||||
{
|
||||
return str;
|
||||
}
|
||||
if (e == null)
|
||||
{
|
||||
e = Encoding.UTF8;
|
||||
}
|
||||
byte[] bytes = e.GetBytes(str);
|
||||
byte[] buffer2 = UrlEncodeNonAscii(bytes, 0, bytes.Length, false);
|
||||
return Encoding.ASCII.GetString(buffer2);
|
||||
}
|
||||
/// <summary>
|
||||
/// url加密,Unicode
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="ignoreAscii"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlEncodeUnicode(string value, bool ignoreAscii)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
int length = value.Length;
|
||||
StringBuilder builder = new StringBuilder(length);
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
char ch = value[i];
|
||||
if ((ch & 0xff80) == 0)
|
||||
{
|
||||
if (ignoreAscii || IsUrlSafeChar(ch))
|
||||
{
|
||||
builder.Append(ch);
|
||||
}
|
||||
else if (ch == ' ')
|
||||
{
|
||||
builder.Append('+');
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.Append('%');
|
||||
builder.Append(IntToHex((ch >> 4) & '\x000f'));
|
||||
builder.Append(IntToHex(ch & '\x000f'));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.Append("%u");
|
||||
builder.Append(IntToHex((ch >> 12) & '\x000f'));
|
||||
builder.Append(IntToHex((ch >> 8) & '\x000f'));
|
||||
builder.Append(IntToHex((ch >> 4) & '\x000f'));
|
||||
builder.Append(IntToHex(ch & '\x000f'));
|
||||
}
|
||||
}
|
||||
return builder.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ch"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsUrlSafeChar(char ch)
|
||||
{
|
||||
if ((((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= '0') && (ch <= '9')))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
switch (ch)
|
||||
{
|
||||
case '(':
|
||||
case ')':
|
||||
case '*':
|
||||
case '-':
|
||||
case '.':
|
||||
case '_':
|
||||
case '!':
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="n"></param>
|
||||
/// <returns></returns>
|
||||
public static char IntToHex(int n)
|
||||
{
|
||||
if (n <= 9)
|
||||
{
|
||||
return (char)(n + 0x30);
|
||||
}
|
||||
return (char)((n - 10) + 0x61);
|
||||
}
|
||||
/// <summary>
|
||||
/// Html解码,将html里未转义成功的重新转义。
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static string ConvertHtmlInner(string str)
|
||||
{
|
||||
return System.Web.HttpUtility.HtmlDecode(str);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4328,7 +4328,7 @@ namespace BrightIdeasSoftware
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all items from this list
|
||||
/// 移除所有对象(线程安全)
|
||||
/// </summary>
|
||||
/// <remark>This method can safely be called from background threads.</remark>
|
||||
public virtual void ClearObjects() {
|
||||
|
@ -6073,13 +6073,13 @@ namespace BrightIdeasSoftware
|
|||
if (first <= last) {
|
||||
for (int i = first; i <= last; i++) {
|
||||
string data = column.GetStringValue(this.GetNthItemInDisplayOrder(i).RowObject);
|
||||
if (data.StartsWith(text, StringComparison.CurrentCultureIgnoreCase))
|
||||
if (data.IndexOf(text, StringComparison.CurrentCultureIgnoreCase)>=0)
|
||||
return i;
|
||||
}
|
||||
} else {
|
||||
for (int i = first; i >= last; i--) {
|
||||
string data = column.GetStringValue(this.GetNthItemInDisplayOrder(i).RowObject);
|
||||
if (data.StartsWith(text, StringComparison.CurrentCultureIgnoreCase))
|
||||
if (data.IndexOf(text, StringComparison.CurrentCultureIgnoreCase)>=0)
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||
// 方法是按如下所示使用“*”: :
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.2109.1301")]
|
||||
[assembly: AssemblyFileVersion("3.0.2109.1301")]
|
||||
[assembly: AssemblyVersion("3.0.2110.0101")]
|
||||
[assembly: AssemblyFileVersion("3.0.2110.0101")]
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30330.147
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31612.314
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ryUpdateV4", "ryUpdate\ryUpdateV4.csproj", "{11A63E24-0257-4C54-A109-F1A609A52A62}"
|
||||
EndProject
|
||||
|
@ -11,14 +11,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDbV4", "MyDb\MyDbV4.cspro
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDb_SQLiteV4", "MyDb_SQLite\MyDb_SQLiteV4.csproj", "{6B969CE8-D723-4B2C-A8FD-FAD2FB28FF01}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDb_MSSQLV4", "MyDb_MSSQL\MyDb_MSSQLV4.csproj", "{631290D3-7CB8-4B62-833E-361C20A5F2E0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDb_MySQLV4", "MyDb_MySQL\MyDb_MySQLV4.csproj", "{DE092C43-1AB5-4229-8EC8-35C9936C4331}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Itrycn_Project", "Itrycn_Project\Itrycn_Project.csproj", "{62B5C3E8-4AF1-4A7F-A40B-A6186F83DBD2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RyWeb", "RyWeb\RyWeb.csproj", "{E64CAA45-23B4-4417-B353-192BEB675825}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RyPrint", "RyPrint\RyPrint.csproj", "{B6784652-825A-482C-8A21-08E2539AF2BF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Itrycn_Project2", "Itrycn_Project2\Itrycn_Project2.csproj", "{DC9FDB61-FEDD-4795-AFDC-8376AB781C56}"
|
||||
|
@ -63,14 +59,6 @@ Global
|
|||
{6B969CE8-D723-4B2C-A8FD-FAD2FB28FF01}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6B969CE8-D723-4B2C-A8FD-FAD2FB28FF01}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6B969CE8-D723-4B2C-A8FD-FAD2FB28FF01}.Release|x86.Build.0 = Release|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{631290D3-7CB8-4B62-833E-361C20A5F2E0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DE092C43-1AB5-4229-8EC8-35C9936C4331}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DE092C43-1AB5-4229-8EC8-35C9936C4331}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DE092C43-1AB5-4229-8EC8-35C9936C4331}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -87,14 +75,6 @@ Global
|
|||
{62B5C3E8-4AF1-4A7F-A40B-A6186F83DBD2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{62B5C3E8-4AF1-4A7F-A40B-A6186F83DBD2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{62B5C3E8-4AF1-4A7F-A40B-A6186F83DBD2}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E64CAA45-23B4-4417-B353-192BEB675825}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B6784652-825A-482C-8A21-08E2539AF2BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B6784652-825A-482C-8A21-08E2539AF2BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B6784652-825A-482C-8A21-08E2539AF2BF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
|
Loading…
Reference in New Issue
Block a user