旧版本的Crystal Reports升级到Crystal Reports forVisual Studio 2010时的错误解决方法

我在使用BOOK: Professional Crystal Reports for VS.NET 的时候,经常出错: …..Assembles不能用。。。。 这里最好的解决办法是,1.重新安装.Net FrameWork,2. Select the Compile tab and click on the “Advanced Compile Options…” button. Find “Target CPU” and set it to x86. Next find “Target Framework” and set it to .NET Framework 4. 这下一切都好了。 […]

Read More…

C# 线程资源同步方式总结

在现代的程序开发中,资源的同步是一个比较重要的课题,在.Net中,对这部分有很丰富类库供我们使用,现在总结一下在各种情况下对资源同步的 机制。 1.将字段声明为volatile 当一个字段被声明为volatile时,CLR中一些管理代码和内存的内部机制将负责对字段进行同步,并且总能保证读取到的字段信息都为最新的值,被声明为 volatile的字段必须具备以下特征之一 1.为引用类型 2.一个指针(在不安全代码中) 3.sbyte,byte,short,ushort,int,uint,char,float,bool 4.一个使用底层类型的枚举类型 2.使用System.Threading.Interlocked 类 在许多增对整数的操作中,我们都比较容易忽视线程的问题,例如执行下列代码 i = i + 1; 实际上,上述代码分为3步骤 1).  从内存中,读取i的值 2).  将读取出来的值加1 3).  将新的值写入内存中 在单线程上,这个操作不会有任何问题,但是当i被多个线程访问时,问题就出现了,对i进行修改的线程,在上述的任何一部都有可能被其它读取线程打断,想象一下, 当操作线程执行完第二步,准备将新的值写入内存中时,此时其它读取线程获得了执行权,这时读取到的i的值并不是我们想要的,因此,这个操作不具备原子性,在.Net中,使用Interlocked类能确保操作的原子性,Interlocked类有以下的方法 Increment Decrement Exchange 上述的方法的参数都为带ref 标识的参数,因此我们说,这些方法保证了数据的原子性,在多线程中,涉及到整数的操作时,数据的原子性值得考虑,Interlocked的操作代码如下             int i = 0;             System.Threading.Interlocked.Increment(ref i);             Console.WriteLine(i);             System.Threading.Interlocked.Decrement(ref i);             Console.WriteLine(i);             System.Threading.Interlocked.Exchange(ref i, 100);             Console.WriteLine(i); 输出信息如下 3.使用lock关键字 地球人都知道,使用lock关键字可以获取一个对象的独占权,任何需要获取这个对象的操作的线程必须等待以获取该对象的线程释放独占权,lock提供了简单的同步资源的方法,与Java中的synchronized关键字类似。 […]

Read More…

Posted in C#

About Log4Net在WEB中应用

如何使用log4net在Web中应用?其实很简单,你只要对程序作如何修改即可: 1.在common中加入log4netHelper.cs public class log4netHelper { public static void debug(string message) { log4net.ILog log = log4net.LogManager.GetLogger(“Test”); if (log.IsDebugEnabled) { log.Debug(message); } log = null; } public static void error(string message) { log4net.ILog log = log4net.LogManager.GetLogger(“Test”); if (log.IsErrorEnabled) { log.Error(message); } log = null; } public static void fatal(string message) { log4net.ILog log = log4net.LogManager.GetLogger(“Test”); if […]

Read More…

ASP.NET程序中常用的三十三种代码

1. 打开新的窗口并传送参数: 传送参数: response.write(“<script>window.open(‘*.aspx?id=“+this.DropDownList1.SelectIndex+”&id1=“+…+”‘)</script>“) 接收参数: string a = Request.QueryString(“id”); string b = Request.QueryString(“id1”); 2.为按钮添加对话框 Button1.Attributes.Add(“onclick”,”return confirm(‘确认?’)”); button.attributes.add(“onclick”, ”if(confirm(‘are you sure…?’)){return true;}else{return false;}”) 3.删除表格选定记录 int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex]; string deleteCmd = “DELETE from Employee where emp_id = “ + intEmpID.ToString() 4.删除表格记录警告 private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e) {  switch(e.Item.ItemType)  {   case ListItemType.Item :   case ListItemType.AlternatingItem :   case […]

Read More…

将DataReader转换为DataTable的一个函数

 1        public static DataTable ConvertDataReaderToDataTable(IDataReader reader)  2        {  3            DataTable objDataTable = new DataTable();  4            int intFieldCount = reader.FieldCount;  5            for (int intCounter = 0; intCounter  […]

Read More…