c#如何将数据库连接封装成dll
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#如何将数据库连接封装成dll相关的知识,希望对你有一定的参考价值。
如题 困扰好久了 各位帮帮忙哇!!! 在线等
就是说引用这个类库,传入查询语句,返回一个DataTable;连接字符串写在config.ini文件了dll去读取;最好有代码;万分感谢 那个数据库是Oracle
谢谢一楼/二楼的回答 可是小弟刚学 您有源代码么 我看一下学习下
谢谢三楼的回答 我想在操作数据库的时候可以直接调用DLL就行,这样是不是会方便点
一、创建dll文件:
例如生成一个md5编码判断状态的文件,即,输入一个字符串(string A)和一个32位md5编码(string B),判断此字符串A对应的32位md5编码是否与B相等,如果相等返回true,否则返回false。
打开VS 2005,“文件”--》“新建”--“项目”,选择“Windows 控件库”,命名后点击“确定”,在“UserControl1.cs”中输入以下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Text;
using System.Security.Cryptography;
namespace md5
public partial class Program : UserControl
#region MD5 32位加密:GetMd5Str32
/// <summary>
/// 32位MD5加密
/// </summary>
/// <param name="strSource">待加密字串</param>
/// <returns>加密后的字串</returns>
public static string GetMd5Str32(string strSource)
byte[] bytes = Encoding.ASCII.GetBytes(strSource);
byte[] hashValue = ((System.Security.Cryptography.HashAlgorithm)System.Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 16; i++)
sb.Append(hashValue[i].ToString("x2"));
return sb.ToString().ToUpper();
#endregion
#region 核对md5编码是否一致:CheckMd5String()
/// <summary>
/// 核对md5编码是否一致
/// </summary>
/// <param name="ConvertString"></param>
/// <returns>如果一致返回true,否则返回false</returns>
///
public static bool CheckMd5String(string str1, string str2)
string md5String = str1; //需要验证的字符串
string md5DbString = str2; //需要核对的32位md5编码
int result = string.Compare(md5.Program.GetMd5Str32(str1), md5DbString, true);
if (result == 0)
return true;
else
return false;
#endregion
修改“UserControl1.Designer.cs”中的命名空间为“md5”,方法为“Program”,即可生成dll文件。
在...\bin\Debug文件假下,可以找到相应的dll文件。
二、部署dll流程:
首先把dll文件放到应用程序...\bin\Debug\下;
然后在解决方案中添加引用:右键鼠标-->添加引用-->浏览-->选择dll放置路径后点击“确定”。
注意:要在应用文件头处使用using md5;命令。
测试应用程序代码,如下:Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using md5;
namespace WindowsApplication1
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
string str1 = textBox1.Text.ToString();
string md5String = textBox2.Text.ToString();
textBox3.Text = md5.Program.GetMd5Str32(str1);
textBox4.Text = md5.Program.CheckMd5String(str1, md5String).ToString();
private void button2_Click(object sender, EventArgs e)
this.Close();
三、注意点:
1、在C#应用程序开发过程中,加载dll文件时,报错“未能加载文件或程序集“md5, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。”,请指点一下是什么原因?
解决:这是因为加载dll的路径问题,正确加载方式为:在“解决方案”的“引用”文件上右击鼠标,选择“添加引用”---》在“浏览”选项卡中添加引用(注意:自己定义的dll文件不能在“.NET”选项卡中添加。)
------------------------------------------------------------------------------------------------------------------
c#生成DLL文件,内部函数的问题
用C#编写一组处理XML文档的代码,由于要求生成DLL文件,并由外部的其他工具访问动态库中的文件,
但是用Dependency Walker检测我生成的这个DLL文件没有显示任何的函数,以前没做过这方面的东西,求教了
代码如下:
using System;
using System.IO;
using System.Xml;
public class Sample
public static void Main()
DeleteArg();
static void DeleteArg()
XmlDocument doc = new XmlDocument();
doc.Load(@"c:\\data1.xml");
XmlNode root = doc.DocumentElement;
XmlNode Node1;
XmlNodeList nodeList = doc.SelectSingleNode("/Entity/Columns").ChildNodes;
foreach (XmlNode xn in nodeList)
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Name") == "SysModuleID")
xe.RemoveAll();
//xe.RemoveAttribute("Name");//删除Name属性
doc.Save("c:\\data1.xml");//保存这个文档到文件中
以上代码实现删除XML文件中某一节点的功能,如何在生成DLL后能够使用检测工具检测出DeleteArg函数,
使用Dependency Walker没检测出该函数是不是以为着这个动态库文件不能被调用.
----
因为.net的程序不是这样把函数放在导出表的, 我记得.net做的dll只导出了一个_CorDllMain的方法,
所以用Dependency Walker是看不出来的. 如果你想看.net做的dll导出了什么内容,可以用反射查看元数据
----
生成这个DLL库文件,是想要别的工具运行这个动态库文件,实现DELETEARG()这个函数的功能
----
可以的
----
你上面的代码不是生成DLL的,而是一个控制台应用程序.
要想创建动态库(DLL),在新建项目窗口中选择"类库", 默认的代码是这样的:
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary2
public class Class1
// 然后添加你的代码.最后代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace ClassLibrary2
public class Class1
public void DeleteArg()
XmlDocument doc = new XmlDocument();
doc.Load(@"c:\\data1.xml");
XmlNode root = doc.DocumentElement;
XmlNode Node1;
XmlNodeList nodeList = doc.SelectSingleNode("/Entity/Columns").ChildNodes;
foreach (XmlNode xn in nodeList)
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Name") == "SysModuleID")
xe.RemoveAll();
//xe.RemoveAttribute("Name");//删除Name属性
doc.Save("c:\\data1.xml");//保存这个文档到文件中
最后编译一下就可以,
在Debug文件夹下回产生一个dll文件,最后在需要的工程里,将这个dll文件引进进去就可以用 参考技术A 新建一个类库的项目。然后把你这连接的类放进去。生成就是DLL。。然后Public一堆方法。。。。 参考技术B 你把连接数据库和数据库打交道的CS类库写好后,生成一下,再到应用程序集的文件夹bin下找就有dll和pdb文件。
是啊,生成dll文件后在你的项目中添加应用dll文件,在业务逻辑层可以调用类库中的所有的公开的方法,传入参数就可以了。
根据参数不同选择不同的方法,相信楼主更清楚方法的调用、重要的是要将dll文件引用到项目中来。 参考技术C 新建一个类库 ,在这个类库中建立几个关于数据库操作的类 ,然后生成项目即可 那么在bin目录下就可以看到dll文件了 注意:新建项目的时候是新建类库 而不是winform程序或其它的什么项目 参考技术D 数据库连接封装dll是什么意思?是不想让你看到你的连接字符串?还是要把操作的方法封装起来?
把操作方法封装起来没什么难度,但是要把连接字符串封装起来,你就没办法改了,不如将其加密。 第5个回答 2010-03-24 按照二楼的方法 可是这样做有什么意义呢?
请问如何把lib(C语言编的)同其带有宏定义的.h文件封装起来 生成一个新的文件供C#调用?
注:有连个.h和我所要调用的lib有关,一个是带有宏定义的.h文件,另一个是导出函数声明的.h文件。我想在c#中调用该lib库文件,请问该如何处理啊?
请高手多多指点!不胜感激!
因为C#不支持头文件,能否把Lib 和.h封装为一个Dll 供C#调用?怎么办?
(.h头文件包含宏定义和匿名枚举)
据我所知,C#是不能够调用lib库的,语言框架上就不支持。
一般C#使用C/C++的类时都是将其封装到dll动态连接库中,然后再使用 参考技术A 当函数调用完成后,栈需要清除, 如果我们的函数使用了_cdecl,那么栈的清除工作是由调用者(客户端)完成的。
*******************************************
hy406,您好!
是这样的,类似的关键字还有_stdcall,如果用了_stdcall而不是_cdecl,那么清理工作由函数自己完成。
_cdecl一般用于参数数量不确定的函数,因为这样的函数在调用之前不知道参数的长度,所以函数自身无法完成清理工作,例如printf()函数、scanf()函数等。 参考技术B 楼主看看书,仔细看看编译预处理都做了哪些事情。
程序设计语言的预处理的概念:在编译之前进行的处理。
c语言的预处理主要有三个方面的内容:
1.宏定义;
2.文件包含;
3.条件编译。
预处理命令以符号“#”开头。
宏定义又称为宏代换、宏替换,简称“宏”。预处理制作单纯的宏展开,并不是检查语法错误,所说义是错误的。
语法错误都是编译阶段才检查的。预处理是不检查的。
以上是关于c#如何将数据库连接封装成dll的主要内容,如果未能解决你的问题,请参考以下文章