Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
Oracle 远程访问配置
服务端配置
如果不想自己写,可以通过 Net Manager 来配置.
以下配置文件中的 localhost
改为 ip
地址,否则,远程不能访问.
1.网络监听配置
# listener.ora Network Configuration File: C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = C:\app\Administrator
多个IP时,如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.226.2)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.226.3)(PORT = 1521))
)
)
2.TNS 配置
# tnsnames.ora Network Configuration File: C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORCL=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
多个IP时,如下:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.226.2)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.226.3)(PORT = 1521))
)
(SOURCE_ROUTE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
3.停止和启动服务
先停止以下服务,然后再启动.
- OracleOraDb11g_homeTNSListener
- OracleService*
客户端配置
1.下载 ODAC
压缩包.
2.解压下载的 ODAC
压缩包.
3.执行安装命令
示例:
install.bat all D:\Program\ODAC\12040x64 OracleHome true
4.添加环境变量
- ORACLE_HOME : 是
ODAC
安装的目录. - TNS_ADMIN : 是文件
tnsnames.ora
所在的目录,一般为ODAC
安装目录下的network\admin
中.
注: TNS_ADMIN 可以不用添加,直接将 tnsnames.ora
文件复制到 ODAC
安装目录下即可
将 %ORACLE_HOME%
添加到 PATH
环境变量中.
5.配置 TNS
在配置文件 tnsnames.ora
中加入
DBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <db-host>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <db-name>)
)
)
说明:
- <db-host> : 数据库电脑的IP或者是计算机名
- <db-name> : 数据库TNS配置的名称
本作品由SeayXu创作,采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
基于http://www.cnblogs.com/seayxu上的作品创作。
可自由转载、引用,但需署名作者且注明文章出处,并以相同方式共享。
在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标
前言
FontAwesome 大家都不陌生,精美的图标,出现在各式各样的网页中。
最近在做 Windows Forms 应用程序,要求美观,就想能不能把 FontAwesome 图标用上,于是就有了本文。
本人已经将 FontAwesome 进行了封装,并上传到了 GitHub 和 NuGet。
- GitHub:https://github.com/seayxu/FontAwesome
- 码云:http://git.oschina.net/seayxu/FontAwesome
- NuGet:https://www.nuget.org/packages/FontAwesomeNet/
样图
简介
下面是解决方案列表:
|- .nuget
|- sample
|--- FontAwesomeNet.Sample # Windows Forms Samlpe
|--- FontAwesomeNet.Wpf.Sample # WPF Samlpe
|- src
|--- FontAwesomeNet # FontAwesome for .NET library
使用
可以参考示例源码。
0. 安装字体
安装过请忽略,地址是:fontawesome-webfont-4.7.0.ttf。
1. 安装类库
PM> Install-Package FontAwesomeNet
2. 添加命名空间
using FontAwesomeNet;
3. 生成图片(Image)或图标(Icon)
使用的是 FontAwesome 静态类。
获取字体图标名称:
// get FontAwesome icon class names(type is Dictionary<string, int>)
string[] names = FontAwesome.TypeDict.Select(v => v.Key).ToArray();
获取字体图标名称对应的Unicode码:
// use FontAwesome icon class name get FontAwesome icon Unicode value
int val = FontAwesome.TypeDict["fa-heart"];//0xf004
获取图片和图标:
只有这两个方法。
Bitmap bmp = FontAwesome.GetImage(val);//0xf004
Icon ico = FontAwesome.GetIcon(val);//0xf004
修改默认参数:
直接对静态字段赋值即可。
FontAwesome.IconSize = 128;//change icon size
FontAwesome.ForeColer = Color.Purple;//change icon forecolor
...
如有不好的地方,欢迎大家更正,谢谢。
本作品由SeayXu创作,采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
基于http://www.cnblogs.com/seayxu上的作品创作。
可自由转载、引用,但需署名作者且注明文章出处,并以相同方式共享。
C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
Q:
在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常。
即在 XML文档(0, 0)中有一个错误:缺少根元素。
A:
首先看下代码:
StringBuilder sb = new StringBuilder();
using (MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream);
writer.Write(sb.ToString().Trim());
writer.Flush();
//stream.Position=0;
// or
//stream.Seek(0, SeekOrigin.Begin);
StreamReader reader = new StreamReader(stream);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
object obj = xmlSerializer.Deserialize(reader);
reader.Close();
reader.Close();
writer.Close();
writer.Dispose();
}
抛出异常是在object obj = xmlSerializer.Deserialize(reader);
这里出现的。
问题在于writer.Write(sb.ToString().Trim());
这里,原因是进行了写入操作,最后流的位置停留在尾部。因此,在反序列化之前将流的位置定位到开始 0 的位置即可。
这里就是在 上面注释的地方。
本作品由SeayXu创作,采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
基于http://www.cnblogs.com/seayxu上的作品创作。
可自由转载、引用,但需署名作者且注明文章出处,并以相同方式共享。
C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
前言
在开发应用程序时,通常只让程序运行一个实例。所以,就要判断程序是否已经运行。
下面是我自己在项目中使用到,封装好的帮助类。有 普通的 C# 应用程序 和 Windows CE 和 Windows Mobile 应用程序使用的方法。
主要是通过 System.Threading.Mutex 类 和 Win32 API 来实现,下面就是各自的代码,调用示例在最后面。
普通 C# 应用程序
主要是 Windows 窗体应用程序和控制台程序。
1. 使用 System.Threading.Mutex 类
using System.Threading;
namespace XY.Util.Helper
{
/// <summary>
/// Mutex helper
/// </summary>
public class MutexHelper
{
/// <summary>
/// 判断程序是否已经运行
/// <param name="assembly">程序集实例</param>
/// </summary>
/// <returns>
/// true: 程序已运行
/// false: 程序未运行
/// </returns>
public static bool IsApplicationOnRun(System.Reflection.Assembly assembly)
{
string strAppName = assembly.GetName().Name;
return IsApplicationOnRun(strAppName);
}
/// <summary>
/// 判断程序是否已经运行
/// <param name="assemblyName">程序名称</param>
/// </summary>
/// <returns>
/// true: 程序已运行
/// false: 程序未运行
/// </returns>
public static bool IsApplicationOnRun(string assemblyName)
{
bool ret = false;
//第一个参数:true--给调用线程赋予互斥体的初始所属权
//第一个参数:互斥体的名称
//第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true
Mutex mutex = new Mutex(true, assemblyName, out ret);
return !ret;
}
}
}
2. 使用 Win32 API
using System;
using System.Runtime.InteropServices;
namespace XY.Util.Helper
{
/// <summary>
/// Mutex helper
/// </summary>
public class MutexHelper
{
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr OpenMutex(uint dwDesiredAccess, bool bInitialOwner, string lpName);
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, bool bInitialOwner, string lpName);
/// <summary>
/// 判断程序是否已经运行
/// <param name="assembly">程序集实例</param>
/// </summary>
/// <returns>
/// true: 程序已运行
/// false: 程序未运行
/// </returns>
public static bool IsApplicationOnRun(System.Reflection.Assembly assembly)
{
string strAppName = assembly.GetName().Name;
return IsApplicationOnRun(strAppName);
}
/// <summary>
/// 判断程序是否已经运行
/// <param name="assemblyName">程序名称</param>
/// </summary>
/// <returns>
/// true: 程序已运行
/// false: 程序未运行
/// </returns>
public static bool IsApplicationOnRun(string assemblyName)
{
bool ret = false;
if (OpenMutex(0x1F0001, false, assemblyName) == IntPtr.Zero)
{
CreateMutex(IntPtr.Zero, false, assemblyName);
ret = true;
}
return ret;
}
}
}
Windows CE | Windows Mobile 应用程序
在 Windows CE 和 Windows Mobile 中实现,是通过 Win32 API实现的,下面是封装的帮助类:
参考:
using System;
using System.Runtime.InteropServices;
namespace XY.Util.Helper
{
/// <summary>
/// Mutex helper
/// </summary>
public class MutexHelper
{
[DllImport("coredll.dll", EntryPoint = "CreateMutex", SetLastError = true)]
public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, bool bInitialOwner, string lpName);
[DllImport("coredll.dll", EntryPoint = "ReleaseMutex", SetLastError = true)]
public static extern bool ReleaseMutex(IntPtr hMutex);
private const int ERROR_ALREADY_EXISTS = 0183;
/// <summary>
/// 判断程序是否已经运行
/// <param name="assembly">程序集实例</param>
/// </summary>
/// <returns>
/// true: 程序已运行
/// false: 程序未运行
/// </returns>
public static bool IsApplicationOnRun(System.Reflection.Assembly assembly)
{
string strAppName = assembly.GetName().Name;
return IsApplicationOnRun(strAppName);
}
/// <summary>
/// 判断程序是否已经运行
/// <param name="assemblyName">程序名称</param>
/// </summary>
/// <returns>
/// true: 程序已运行
/// false: 程序未运行
/// </returns>
public static bool IsApplicationOnRun(string assemblyName)
{
IntPtr hMutex = CreateMutex(IntPtr.Zero, true, assemblyName);
if (hMutex == IntPtr.Zero)
{
throw new ApplicationException("Failure creating mutex: " + Marshal.GetLastWin32Error().ToString("X"));
}
if (Marshal.GetLastWin32Error() == ERROR_ALREADY_EXISTS)
{
ReleaseMutex(hMutex);
return true;
}
return false;
}
}
}
示例代码
调用示例:
using System;
using System.Reflection;
using XY.Util.Helper;
namespace MutexTest
{
static class Program
{
[MTAThread]
static void Main(string[] args)
{
bool run;
//方式一
run = MutexHelper.IsApplicationOnRun("ApplicationName");
//方式二
run = MutexHelper.IsApplicationOnRun(Assembly.GetExecutingAssembly());
if (run)
{
// application is running...
// Exit.
}
else
{
// start application ...
// startup...
}
}
}
}
本作品由SeayXu创作,采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
基于http://www.cnblogs.com/seayxu上的作品创作。
可自由转载、引用,但需署名作者且注明文章出处,并以相同方式共享。
Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
2018-05-02 17:02 by HilaryHe, 14 阅读, 0 评论, 收藏, 编辑
Decimal类型截取保留N位小数向上取
Decimal类型截取保留N位小数并且不进行四舍五入操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
public class DecimalHelper { /// <summary> /// Decimal类型截取保留N位小数并且不进行四舍五入操作 /// </summary> /// <param name="d"></param> /// <param name="n"></param> /// <returns></returns> public static decimal CutDecimalWithN( decimal d, int n) { string strDecimal = d.ToString(); int index = strDecimal.IndexOf( "." ); if (index == -1 || strDecimal.Length < index + n + 1) { strDecimal = string .Format( "{0:F" + n + "}" , d); } else { int length = index; if (n != 0) { length = index + n + 1; } strDecimal = strDecimal.Substring(0, length); } return Decimal.Parse(strDecimal); } /// <summary> /// Decimal类型截取保留N位小数向上取 /// </summary> /// <param name="d"></param> /// <param name="n"></param> /// <returns></returns> public static decimal Ceiling( decimal d, int n) { decimal t = decimal .Parse(Math.Pow(10, n).ToString()); d = Math.Ceiling(t * d); return d / t; } } |
测试:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Program { static void Main( string [] args) { Console.WriteLine(); decimal Dec = 12.12345M; for ( int i = 0; i < 10; i++) { Console.WriteLine($ "{Dec} 保留{i} 位小数不进行四舍五入操作:" + DecimalHelper.CutDecimalWithN(Dec, i)); } Console.WriteLine(); for ( int i = 0; i < 10; i++) { Console.WriteLine($ "{Dec} 保留{i} 位小数向上取整操作:" + DecimalHelper.Ceiling(Dec, i)); } Console.Read(); } } |
Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作的更多相关文章
- C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...
- 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标
前言 FontAwesome 大家都不陌生,精美的图标,出现在各式各样的网页中. 最近在做 Windows Forms 应用程序,要求美观,就想能不能把 FontAwesome 图标用上,于是就有了本 ...
- C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...
- C# WINFORM判断程序是否运行,且只能运行一个实例(转)
判断程序是否已经运行,使程序只能运行一个实例有很多方法,下面记录两种, 方法1:线程互斥 static class Program { private static System.Threading. ...
- winform判断程序是否运行,且只能运行一个实例
前言 判断程序是否已经运行,使程序只能运行一个实例有很多方法,下面记录两种. 目前使用的是第一种方法. 方法1:线程互斥 static class Program { private static S ...
- C#让应用程序只运行一个实例的几种方法
一 判断是否有相同的实例已经运行 1 根据“Mutex”判断是否有相同的实例在运行 /// <returns>已有实例运行返回true,否则为false</returns>pu ...
- 让程序同时只能运行一个C++ Builder实现(转)
源:让程序同时只能运行一个 很多人都讨论过这个问题, 这里用Victor串口控件里面现成的共享内存功能来实现. 当程序运行第二次时只是激活第一次运行的窗口, 而不是再运行一个程序. 需要在主程序里实现 ...
- 如何用Qt写一个同一时间只能运行一个实例的应用程序
http://blog.sina.com.cn/s/blog_6343941a0100nk2x.html 可以达到的目的: 1.应用只启动一个实例,依赖于QtNetwork模块 2.启动时向另一个实例 ...
- Java程序只运行一个实例[转]
如果希望你的Java程序只能存在一个实例,可以参考下面的用法. 原文链接:http://blog.csdn.net/yaerfeng/article/details/7264729 Java没有提供这 ...
随机推荐
- CAS机制总结
一.简介 CAS机制:(Compare and set)比较和替换 简单来说–>使用一个期望值来和当前变量的值进行比较,如果当前的变量值与我们期望的值相等,就用一个新的值来更新当前变量的值CAS ...
- 【经验】停止Smart Card服务
Windows+R键调出运行 输入 services.msc 有一项Smart Card的服务找到他->属性->启动类型(设置为禁用 )->确定,然后重新启动服务
- Delphi新注释
标准请看帮助文件里的:XML Documentation Comments 个人常用 <summary></summary>:摘要 /// <summary> // ...
- socket编程(Java实现)
主要是前段时间学习的网络知识的基于TCP与UDP编程,Java实现简单的大小写字母的转化,该文主要参考: https://blog.csdn.net/yjp19871013/article/detai ...
- python Matplotlib 系列教程(三)——绘制直方图和条形图
在本章节我们将学习如何绘制条形图和直方图 条形图与直方图的区别:首先,条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的: 直方图是用面积表示各组频数的多少,矩形的高度表示每一组的 ...
- 关于C/C++的一些思考(2)
C++引入类机制的目的: 从语法上将数据和操作捆绑在一起: 从语法上消除变量和函数的名字冲突: 从语法上允许服务端设计者控制数据和函数的访问权限: 从工程上支持数据封装.信息隐藏.将责任推向服务端.减 ...
- 图解C/C++多级指针与多维数组
声明:本文转自 chenyang_yao ,欢迎阅读原文. 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的.其中,多级指针与“多维”数组更是让很多人云里雾里,其实,只要掌握一定的方法 ...
- Python 1-3区分Python文件的两种用途和模块的搜索路径
区分Python文件的两种用途 run.py文件: import m1 m1.py文件: def f1(): print('f1') def f2(): print('f2') #当文件被执行时__n ...
- SQL中带有NOT IN 子查询改写
报表程序中的一段SQL运行很慢,代码如下: 优化前: 耗时:1337s INSERT INTO PER_LTE_ZIB_PB_COMMISSION_07 SELECT P.TOPACTUALID, Q ...
- canvas学习--准备
一)canvas标签 属性: 1.width 和 height 控制canvas宽高: 2.style添加基本样式 3.class,id属性 4.标签内添加一行文本,主要用于浏览器不支持canvas标 ...