office 相关文件读取整理
作者:大鹏 发布于:2013-1-4 14:07 Friday
分类:Asp.Net 2.0
标签: excel adodb
在用ODBC读取DPF、Excel(2003/2007)、txt,db等文件时,存在各种问题。
如用VFP读取DPF文件时,32位系统是正常读取,但是在64位系统下,程序如果采用64位,则不能正常读取。
读取Excel文件时,如果采用Microsoft.Jet.OLEDB 方式,还要在程序中区分Excel2007 和Excel2010等方式,十分麻烦。
在网上找了下,找到Microsoft Access Database Engine 驱动,他可以方便的读取dpf,excel,access,txt 等文件,而且在64位系统下也能正常运行。
Excel 文件读取
string driver = "{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"; string strConn = string.Format("DRIVER={1};DBQ={0};", filePath, driver); OdbcConnection conn = new OdbcConnection(strConn);
上面的代码可以正常运行在32/64位机器上。
DPF 文件读取
string connStr = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};DBQ=" + dir; OdbcConnection conn = new OdbcConnection(connStr);
上面的代码可以正常运行在32/64位机器上。
采用这两种驱动方式需要安装Microsoft Access Database Engine。
下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=13255
Log4net使用指南
作者:大鹏 发布于:2012-6-20 16:02 Wednesday
分类:Asp.Net 2.0
标签: log4net
几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。
经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。
Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。
NetworkStream 读取数据不完整问题
作者:大鹏 发布于:2012-6-7 16:20 Thursday 分类:Asp.Net 2.0
今天写了个发送和读取http站点数据的程序,使用TcpClient的NetworkStream读取数据,但是经常性会出现读取数据不全的现象。单步调试时基本上每次都正常,但是实际应用时就会出现读取到的数据不完整。
弄了一天,还是没有找到更好的解决办法。
private void Forward(object obj) { int requestsize = 4096; string log = ""; try { TcpClient client = (TcpClient)obj; NetworkStream s = client.GetStream(); int i = 0; byte[] buff = new byte[requestsize]; TcpClient server = new TcpClient("127.0.0.1", 8080); NetworkStream cs = server.GetStream(); i = s.Read(buff, 0, buff.Length); cs.Write(buff, 0, i); log += "Request:" + Encoding.Default.GetString(buff, 0, i); buff = new byte[requestsize]; i = cs.Read(buff, 0, buff.Length); s.Write(buff, 0, i); log += "\r\nResponse:" + Encoding.Default.GetString(buff, 0, i); cs.Close(); //s.Close(); server.Close(); client.Close(); Log(log); } catch (Exception ex) { Log("Forward", ex); } }
ChangeConflictException:Row not found or changed 找不到行或行已更改
作者:大鹏 发布于:2012-5-11 17:25 Friday
分类:Asp.Net 2.0
标签: linq
1.比较简单的方法,不使用Linq提供的SubmitChanges()方式提交更改,而直接执行SQL语句,例
db.ExecuteCommand("Update [dbo].[LinqTest] SET Age=25 Where ID = @p0", 1);
这样虽然比较方便,但是感觉又回到了直接写SQL的时代,毕竟Linq to SQL的目的,就是为了让我们看不见SQL,避免写复杂的SQL语句,而直接操作实体对象,这样也可以避免程序可读性差、不便于维护。所以除非万不得已,还是不太推荐使用此方法。WebService开启Session支持
作者:大鹏 发布于:2012-3-27 8:30 Tuesday
分类:Asp.Net 2.0
标签: c# webservice
以前也遇到过这个问题,当时也是找了很多资料,这次要用的时候又忘了。今天再次记录下来备忘一下。
除了要在WebServicce的方法名上加上EnableSession = true之外,在客户端调用的时候还要加上一句:
DBAccess.DBAccessService dbService = new DBAccess.DBAccessService();
dbService.CookieContainer = new System.Net.CookieContainer();
给WebService对象的CookieContainer属性赋值。
ContextMenuStrip关联多个控制时的事件调用
作者:大鹏 发布于:2012-3-26 16:08 Monday
分类:Asp.Net 2.0
标签: c#
当多个控件关联同一个ContextMenuStrip 右键菜单的时候,我们可以对功能菜单调用同一个方法。
如:有多个DataGridView控件,同时关联了一个ContextMenuStrip,我们可以使用以下代码:
private void copyToolStripMenuItem_Click(object sender, EventArgs e) { DataGridView g = (DataGridView)cmsRightMenu.SourceControl; Clipboard.SetText(g.GetClipboardContent().GetData(DataFormats.Text).ToString()); } private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) { DataGridView g = (DataGridView)cmsRightMenu.SourceControl; g.SelectAll(); }
调用webservice连接超时设置
作者:大鹏 发布于:2010-4-3 14:20 Saturday
分类:Asp.Net 2.0
标签: webservice 超时
客户端调用数据量过大的时候往往就连接超时
[code]
ProductWs ps = new ProductWs();
ps.Timeout = 10 * 60 * 1000; //连接超时10分钟
[/code]
如果要设置无限制
[code]ps.Timeout = Timeout.Infinite; [/code]
C#操作Excel时,Excel常用的方法和属性
作者:大鹏 发布于:2009-12-9 16:29 Wednesday 分类:Asp.Net 2.0
1. range.NumberFormatLocal = "@"; //设置单元格格式为文本2. range = (Range)worksheet.get_Range("A1", "E1"); //获取Excel多个单元格区域:本例做为Excel表头
3. range.Merge(0); //单元格合并动作
4. worksheet.Cells[1, 1] = "Excel单元格赋值"; //Excel单元格赋值
5. range.Font.Size = 15; //设置字体大小
6. range.Font.Underline=true; //设置字体是否有下划线
7. range.Font.Name="黑体"; 设置字体的种类
8. range.HorizontalAlignment=XlHAlign.xlHAlignCenter; //设置字体在单元格内的对其方式
9. range.ColumnWidth=15; //设置单元格的宽度
10. range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb(); //设置单元格的背景色
11. range.Borders.LineStyle=1; //设置单元格边框的粗细
12. range.BorderAround
在不同版本的IIS下使用ASP.NET MVC[转载]
作者:大鹏 发布于:2009-9-22 11:20 Tuesday 分类:Asp.Net 2.0
在这篇文章中我们学习在不同版本的IIS中使用ASP.NET MVC和URL Routing。我们学习针对IIS7.0、IIS6.0和更早版本的IIS的处理策略ASP.NET MVC框架依赖于URL Routing,要充分利用URL Routing,我们需要对Web服务器(IIS)进行一些额外的配置。
IIS的最新版本是Windows2008中的IIS7.0,我们也可以Vista系统中(除了Home Basic版)安装IIS7.0。
IIS7.0是提供了两种处理请求的模式-集成模式和传统模式。如果使用IIS7.0的话,那我们不需要做任何配置,如果要使用传统模式的话则需要我们做一些额外的配置工作。
在Windows2003中安装的是IIS6.0,如果是Windows Server 2003的话,那我们可以把IIS6.0升级到IIS7.0。但如果我们使用IIS 6.0的话,那需要我们做一些额外的配置工作。
Windows XP专业版安装的IIS5.1版本,因此我们也需要对IIS5.1进行一些额外的配置工作。
最后Windows2000使用的是IIS5.0,我们也需要对IIS5.0进行一些额外的配置工作。
下面是我们对不同版本IIS的总结:
IIS7.0(集成模式)- 不需要作任何配置就可以使用URL Routing。
IIS7.0(传统模式) - 需要我们进行特别配置来使用URL Routing。
IIS6.0或更低版本 - 需要我们进行特别配置来使用URL Routing。
Visual Studio 2010
作者:大鹏 发布于:2009-9-20 13:37 Sunday 分类:Asp.Net 2.0
今天把之前的Visual Studio 2008给卸载掉了,装上了从MSDN上下载的Visual Studio 2010。传上几张图Show一下。
启动后的界面:
SQL SERVER 2008 阻止保存要求重新创建表的更改
作者:大鹏 发布于:2009-9-2 15:13 Wednesday
分类:Asp.Net 2.0
标签: sqlserver
当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示:不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。
SQL SERVER 2008 阻止保存要求重新创建表的更改
如果要去掉此提示,打开SQL 2008 在最上面
工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要求重新创建表的更改(右侧) 把钩去重新启动2008即可
调用Web服务:请求因HTTP状态401失败:Unauthorized
作者:大鹏 发布于:2009-8-26 16:02 Wednesday
分类:Asp.Net 2.0
标签: c# webservice
“/CallService”应用程序中的服务器错误。
--------------------------------------------------------------------------------
请求因 HTTP 状态 401 失败: Unauthorized。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Net.WebException: 请求因 HTTP 状态 401 失败: Unauthorized。
源错误:
行 81: [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/HelloWorld",
RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
行 82: public string HelloWorld() {
行 83: object[] results = this.Invoke("HelloWorld", new object[0]);
行 84: return ((string)(results[0]));
行 85: }
源文件: D:\Cofco\CofcoMeeting\VSProjects\Cofco.Meeting\Cofco.Meeting.CallService\Web References\ApproveService\Reference.cs
行: 83
堆栈跟踪:
去掉外键约束, 删除数据
作者:大鹏 发布于:2009-7-21 12:10 Tuesday
分类:Asp.Net 2.0
标签: sqlserver
/* usage:
exec fk_switch tablename,0
delete tablename where fieldname = abc
-- truncate table tablename
exec fk_switch tablename,1
*/
create proc fk_switch @tablename varchar(20),@status bit
as
declare @fk varchar(50),@fktable varchar(20)
declare @s varchar(1000)
declare cur cursor for
select b.name as fkname,c.name as fktablename
from sysforeignkeys a
join sysobjects b on a.constid = b.id
join sysobjects c on a.fkeyid = c.id
join sysobjects d on a.rkeyid = d.id
where d.name = @tablename
open cur
fetch next from cur into @fk,@fktable
while @@fetch_status = 0
begin
if @status = 0
begin
set @s = 'alter table +@fktable+ nocheck constraint + @fk'
print @s
end
else
begin
set @s = 'alter table +@fktable+ check constraint + @fk'
print @s
end
exec(@s)
fetch next from cur into @fk,@fktable
end
close cur
deallocate cur
[/code]
文件编码批量转换小工具
作者:大鹏 发布于:2009-7-19 13:31 Sunday
分类:Asp.Net 2.0
标签: php c# 字符集 编码转换
最近又遇到了这种问题,需要将项目中所有的PHP文件批量转换成UTF-8的编码。于是使用C#写了一个批量转换的工具,直接在CMD
命令行中执行就可以了,里面有详细的使用说明。共享出来给一些有似类需要朋友下载使用。
使用方法:
[code]
Usage:
CharsetConverter source destination [-s] [-m match] [-o OriginalCharset] [-
t TargetCharset] [-h]
Options:
source 需要进行编码的文件所在位置,必需为文件夹路径
destination 转换后的文件存放位置
-s 包含子文件夹下的文件
-m match 要进行转换的文件,过滤的表达式
-o OriginalCharset 原文件字符集
-t TargetCharset 目标字符集
-h 查看本工具使用说明
Examples:
CharsetConverter e:\website\MyOA d:\temp -s -m *.php -o gb2312 -t utf-8
[/code]
C# 读取CAD文件缩略图(DWG文件)
作者:大鹏 发布于:2009-7-19 12:01 Sunday
分类:Asp.Net 2.0
标签: c# cad
[code]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace 浏览dwg
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ViewDWG viewDwg = new ViewDWG();
pictureBox1.Image = viewDwg.GetDwgImage("c:\\1.dwg");
}
class ViewDWG
{
struct BITMAPFILEHEADER
{
public short bfType;
public int bfSize;
public short bfReserved1;
public short bfReserved2;
public int bfOffBits;
}
public Image GetDwgImage(string FileName)
{
if (!(File.Exists(FileName)))
{
throw new FileNotFoundException("文件没有被找到");
}
FileStream DwgF; //文件流
int PosSentinel; //文件描述块的位置
BinaryReader br; //读取二进制文件
int TypePreview; //缩略图格式
int PosBMP; //缩略图位置
int LenBMP; //缩略图大小
short biBitCount; //缩略图比特深度
BITMAPFILEHEADER biH; //BMP文件头,DWG文件中不包含位图文件头,要自行加上去
byte[] BMPInfo; //包含在DWG文件中的BMP文件体
MemoryStream BMPF = new MemoryStream(); //保存位图的内存文件流
BinaryWriter bmpr = new BinaryWriter(BMPF); //写二进制文件类
Image myImg = null;
try
{
DwgF = new FileStream(FileName, FileMode.Open, FileAccess.Read); //文件流
br = new BinaryReader(DwgF);
DwgF.Seek(13, SeekOrigin.Begin); //从第十三字节开始读取
PosSentinel = br.ReadInt32(); //第13到17字节指示缩略图描述块的位置
DwgF.Seek(PosSentinel + 30, SeekOrigin.Begin); //将指针移到缩略图描述块的第31字节
TypePreview = br.ReadByte(); //第31字节为缩略图格式信息,2 为BMP格式,3为WMF格式
if (TypePreview == 1)
{
}
else if (TypePreview == 2 || TypePreview == 3)
{
PosBMP = br.ReadInt32(); //DWG文件保存的位图所在位置
LenBMP = br.ReadInt32(); //位图的大小
DwgF.Seek(PosBMP + 14, SeekOrigin.Begin); //移动指针到位图块
biBitCount = br.ReadInt16(); //读取比特深度
DwgF.Seek(PosBMP, SeekOrigin.Begin); //从位图块开始处读取全部位图内容备用
BMPInfo = br.ReadBytes(LenBMP); //不包含文件头的位图信息
br.Close();
DwgF.Close();
biH.bfType = 19778; //建立位图文件头
if (biBitCount < 9)
{
biH.bfSize = 54 + 4 * (int)(Math.Pow(2, biBitCount)) + LenBMP;
}
else
{
biH.bfSize = 54 + LenBMP;
}
biH.bfReserved1 = 0; //保留字节
biH.bfReserved2 = 0; //保留字节
biH.bfOffBits = 14 + 40 + 1024; //图像数据偏移
//以下开始写入位图文件头
bmpr.Write(biH.bfType); //文件类型
bmpr.Write(biH.bfSize); //文件大小
bmpr.Write(biH.bfReserved1); //0
bmpr.Write(biH.bfReserved2); //0
bmpr.Write(biH.bfOffBits); //图像数据偏移
bmpr.Write(BMPInfo); //写入位图
BMPF.Seek(0, SeekOrigin.Begin); //指针移到文件开始处
myImg = Image.FromStream(BMPF); //创建位图文件对象
bmpr.Close();
BMPF.Close();
}
return myImg;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}
}[/code]
C#编程过程中获取相对路径
作者:大鹏 发布于:2009-5-20 21:42 Wednesday
分类:Asp.Net 2.0
标签: c#
string str = System.Environment.CurrentDirectory;
Result: C:\xxx\xxx
2.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str = System. Windows .Forms.Application.StartupPath;
Result: C:\xxx\xxx
3.获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
Result: C:\xxx\xxx\xxx.exe
4.获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
自动增加ID出现不连续可能出现的问题
作者:大鹏 发布于:2009-4-24 12:22 Friday
分类:Asp.Net 2.0
标签: 服务器 sqlserver2005 asp databasemssql-2005
[code]
create table aaa (
id int identity(1,1),
names nvarchar(100),
primary key (id)
)
Go
begin transaction test
insert into aaa (names) values('aaa');
insert into aaa (names) values('aaa');
insert into aaa (names) values('aaa');
rollback transaction test
Go
insert into aaa (names) values('aaa');
select * from aaa
Go
[/code]
visual studio 2008序列号
作者:大鹏 发布于:2009-4-16 8:22 Thursday
分类:Asp.Net 2.0
标签: vs2005 vs2008
1.Visual Studio 2008 Professional Edition:
XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT
2.Visual Studio 2008 Team Test Load Agent:
WPX3J-BXC3W-BPYWP-PJ8CM-F7M8T
3.Visual Studio 2008 Team System:
PYHYP-WXB3B-B2CCM-V9DX9-VDY8T
4.Visual Studio 2008 Team Foundation Server:
WPDW8-M962C-VJX9M-HQB4Q-JVTDM
String.format输出大括号
作者:大鹏 发布于:2009-4-11 16:19 Saturday
分类:Asp.Net 2.0
标签: javascript ajax .net json
以下是搜索到的部分内容:
[quote]
在C#中,string.Format是一个非常方便的格式字符串的方法。
比如为了输出Bill is a student.这个句子,就可以使用以下的方法:
string studentName = "Bill";
string.Format("{0} is a student.", studentName);
这样就可以动态的来格式化字符串。
可以发现,大括号是用来格式化字符串用的,也就是说,如果想格式化大括号,肯定是会出问题的。
实际中,编译可以通过,会报出一个运行时错误:字符串格式错误。
解决方法:
用“{{”或者“}}”来输出。
bool isMale = false;
string result = string.Format("get {{ return {0}; }}", isMale);
result的值应该是“get { return false; }”
[/quote]
这下可以解决输出大括号的问题了。在这里感谢文章的作者!
请在类型名称中显式指定程序集:asp.net错误解决方法
作者:大鹏 发布于:2009-4-2 10:55 Thursday
分类:Asp.Net 2.0
标签: vs2005 sqlserver2005 vs2008
解决方法:把Bin目录改名或App_Code任意一个改名都可以解决问题,但是不方便调试。主要是1.1和2.0的兼容性调试。
[code]
“/”应用程序中的服务器错误。
[i]分析器错误[/i]
说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。
分析器错误信息: 类型“Rimifon.Business.Default”不明确: 它可能来自程序集“E:\Documents\Business\bin\Rimifon.DLL”或程序集“C:\RIMIFON\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\cc9279c5\e024b2d0\App_Code.brg5wkzg.DLL”。请在类型名称中显式指定程序集。
源错误:
行 1: <%@page inherits=Rimifon.Business.Default%><Html>行 2: <head><style>行 3: @import "/Client/Rimifon.css";
源文件: /default.aspx 行: 1
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.210
[/code]