程序开发
用perl 连接access,用了ODBC数据源
1.在Win32下安装ActivePerl 然后在PPM下安装DBI和DBD::ODBC
2.创建一个access数据库
3.创建ODBC数据源
3.1控制面板-->管理工具-->数据源(ODBC)
3.2选"系统DSN"-->添加
3.3选择"Driver do Microsoft Access (*.mdb)"
3.4然后有个对话框,填入数据源名,点确定
4试着运行以下代码:
#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use DBD::ODBC;
$username = "";
$pwd = "";
my $dbh = DBI->connect("DBI:ODBC:Employee", $username, $pwd) or
die("Couldn't make connection to database:$DBI::errstr");
#注意:这里的Employee是你刚才填数据源时填入的名字
my $sth = $dbh->prepare(q{Select * FROM employee}) or
die("Cannot prepare statement:", $dbh->errstr(),"\n");
my $rc = $sth->execute() or
die("Cannot execute statement:", $sth->errstr(), "\n");
my @array;
while (@array = $sth->fetchrow_array()) {
write();
}
warn($DBI::errstr) if $DBI::err;
$dbh->disconnect();
$sth->finish();
format STDOUT =
@<<<<<<@<<<<<<<<<@<<<<<<<<<<@<<<<<@<<<<<<<<<@<<<<<<<<<<<<<<
$array[0],$array[1],$array[2],$array[3],$array[4], $array[5]
1.在Win32下安装ActivePerl 然后在PPM下安装DBI和DBD::ODBC
2.创建一个access数据库
3.创建ODBC数据源
3.1控制面板-->管理工具-->数据源(ODBC)
3.2选"系统DSN"-->添加
3.3选择"Driver do Microsoft Access (*.mdb)"
3.4然后有个对话框,填入数据源名,点确定
4试着运行以下代码:
#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use DBD::ODBC;
$username = "";
$pwd = "";
my $dbh = DBI->connect("DBI:ODBC:Employee", $username, $pwd) or
die("Couldn't make connection to database:$DBI::errstr");
#注意:这里的Employee是你刚才填数据源时填入的名字
my $sth = $dbh->prepare(q{Select * FROM employee}) or
die("Cannot prepare statement:", $dbh->errstr(),"\n");
my $rc = $sth->execute() or
die("Cannot execute statement:", $sth->errstr(), "\n");
my @array;
while (@array = $sth->fetchrow_array()) {
write();
}
warn($DBI::errstr) if $DBI::err;
$dbh->disconnect();
$sth->finish();
format STDOUT =
@<<<<<<@<<<<<<<<<@<<<<<<<<<<@<<<<<@<<<<<<<<<@<<<<<<<<<<<<<<
$array[0],$array[1],$array[2],$array[3],$array[4], $array[5]
TEA(Tiny Encryption Algorithm) 是一种优秀的数据加密算法,虽然它比 DES(Data Encryption Standard) 要简单得多, 但有很强的抗差分分析能力,加密速度也比 DES 快得多,而且对 64 位数据加密的密钥长达 128 位,安全性相当好。
C#实例见附件
下载文件 (已下载 23 次)
附C/C++代码如下:
void encipher( unsigned long * const v, const unsigned long * const k )
{
register unsigned long y = v[0], z = v[1], sum = 0, delta = 0x9E3779B9,
a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
while ( n-- > 0 )
{
sum += delta;
y += ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
z += ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
}
v[0] = y;
v[1] = z;
}
void decipher( unsigned long * const v, const unsigned long * const k )
{
register unsigned long y = v[0], z = v[1], sum = 0xC6EF3720, delta = 0x9E3779B9,
a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
// sum = delta << 5, in general sum = delta * n
while ( n-- > 0 )
{
z -= ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
y -= ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
sum -= delta;
}
v[0] = y;
v[1] = z;
}
C#实例见附件
下载文件 (已下载 23 次)附C/C++代码如下:
void encipher( unsigned long * const v, const unsigned long * const k )
{
register unsigned long y = v[0], z = v[1], sum = 0, delta = 0x9E3779B9,
a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
while ( n-- > 0 )
{
sum += delta;
y += ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
z += ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
}
v[0] = y;
v[1] = z;
}
void decipher( unsigned long * const v, const unsigned long * const k )
{
register unsigned long y = v[0], z = v[1], sum = 0xC6EF3720, delta = 0x9E3779B9,
a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
// sum = delta << 5, in general sum = delta * n
while ( n-- > 0 )
{
z -= ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
y -= ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
sum -= delta;
}
v[0] = y;
v[1] = z;
}
今天测试一个VC7编写的dll文件,本机测试通过,放到别的相同的操作系统的电脑上时出现没有找到MFC71.dll,因此这个程序未能启动的错误提示。查找原因发现我的开发电脑系统目录下有这个文件,另外一台没有这个文件,又不想将这个文件复制到另外电脑上,所以采用了在项目属性那里将"MFC的使用"的值由"在共享DLL中使用MFC"改为"在静态库中使用MFC",问题解决,不过测试的dll文件也由21k变成了160k
今天用C#程序调用VC编译的dll文件,出现错误"无法加载DLL(XXX.DLL)",后来发现我的C#程序是用Visual Studio .net 2003开发的,那个dll是用.net 2005开发的。将dll的代码在.net 2003中编译后顺利通过加载。
很好用的,一直在用它
//默认密钥向量
private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptString, string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch(Exception exp)
{
return decryptString;
MessageBox.Show(exp.Message);
}
}
//默认密钥向量
private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptString, string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch(Exception exp)
{
return decryptString;
MessageBox.Show(exp.Message);
}
}




2007/11/07 09:36 | 
