OLEDBConnection 和SQLConnection 有什么区别SQLConnection , 连接池被隐式管理,但也提供选项允许您自己管理池 。SQLConnection是SQL专用的 , OLEDBConnection可以对其他数据库的连接,如Access 。同类其他面试题 点击新一篇或旧一篇可浏览全部同类面试题新一篇:采用怎样的方法保证数据的完整性?旧一篇:解释DataSet(ds) 和 ds as DataSet 的含义?共有1条 关于 “”的评论1jim.jin:They are two different implementations of IDBConnection. SqlConnection isthe SqlServer implementation, OleDb was everything ‘else’ . That’s beenminimized to some degree since the addition of the ODBC and Oracle librariesin the 1.1 framework so OleDbConnection should probably be renamed toPeopleWhoStillUseMSAccessConnectionThe answer to your question though. Back in the old school days, a bunch ofVB programmers started whining b/c data access was too hard. So Microsoftcame out with ODBC which was an agreed upon spec that you could use toaccess any database that complied with it. They still complained that itwas still to hard. So they came up with OleDB, the next version ofDataAccessForEveryone. From there things morphed into ADO and then morenot agree to abide by, most have but some haven’t.你有答案? 你对以上面试题有意见? 你想发表你的见解? 写下来吧!你的分享将会让很多人受益!
c#怎么使用oledbconnection关于使用ADO.NET创建并写入Excel文件与普通数据库操作极为类似,参见以下代码:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
string sqlCreate = "CREATE TABLE TestSheet ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
OleDbCommand cmd = new OleDbCommand(sqlCreate, cn);
//创建Excel文件:C:/test.xls
cn.Open();
//创建TestSheet工作表
cmd.ExecuteNonQuery();
//添加数据
cmd.CommandText = "INSERT INTO TestSheet VALUES(1,'elmer','password')";
cmd.ExecuteNonQuery();
//关闭连接
cn.Close();
OLEDBConnection 和SQLConnection 有什么区别.NET答:OLEDBConnection , 连接池将由提供程序自动处理,所以您不必自己进行管理 。SQLConnection,连接池被隐式管理,但也提供选项允许您自己管理池 。SQLConnection是SQL专用的,OLEDBConnection可以对其他数据库的连接 , 如Access 。同类其他面试题 点击新一篇或旧一篇可浏览全部同类面试题新一篇:采用怎样的方法保证数据的完整性?旧一篇:解释DataSet(ds) 和 ds as DataSet 的含义?共有1条 关于 “”的评论1jim.jin:They are two different implementations of IDBConnection. SqlConnection isthe SqlServer implementation, OleDb was everything ‘else’ . That’s beenminimized to some degree since the addition of the ODBC and Oracle librariesin the 1.1 framework so OleDbConnection should probably be renamed toPeopleWhoStillUseMSAccessConnectionThe answer to your question though. Back in the old school days, a bunch ofVB programmers started whining b/c data access was too hard. So Microsoftcame out with ODBC which was an agreed upon spec that you could use toaccess any database that complied with it. They still complained that itwas still to hard. So they came up with OleDB, the next version ofDataAccessForEveryone. From there things morphed into ADO and then morenot agree to abide by, most have but some haven’t.你有答案? 你对以上面试题有意见? 你想发表你的见解? 写下来吧!你的分享将会让很多人受益!你的名字相关面试题 ·Sr.Net 和Winform.net开发面试题 ·.net面试中的一些常见问题与答案 ·一些.NET软件开发基础面试题的参考答案,巩固一下基础理论知识吧 ·.NET ASP.NET开发工程师面试题 ·.NET类的初始化时内容空间是如何分配的?
什么是oledbOLEDB(对象链接和嵌入数据库)位于ODBC层与应用程序之间. 在你的ASP页面里,ADO是位于OLEDB之上的"应用程序". 你的ADO调用先被送到OLEDB,然后再交由ODBC处理. 你可以直接连接到OLEDB层,如果你这么做了,你将看到服务器端游标(recordset的缺省的游标,也是最常用的游标)性能的提升.
用oledb连接数据库:
A.sql server:
connstr="PROVIDER=SQLOLEDB;
DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname"
B.access:
connstr="PROVICER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\abc\abc.mdb"
值得注意的是,OLE DB对ODBC的兼容性,允许OLE DB访问现有的ODBC数据源 。其优点很明显,由于ODBC相对OLE DB来说使用得更为普遍,因此可以获得的ODBC驱动程序相应地要比OLE DB的要多 。这样不一定要得到OLE DB的驱动程序,就可以立即访问原有的数据系统 。
提供者位于OLE DB层,而驱动程序位于ODBC层 。如果想使用一个ODBC数据源,需要使用针对ODBC的OLE DB提供者,它会接着使用相应的ODBC驱动程序 。如果不需要使用ODBC数据源,那么可以使用相应的OLE DB提供者,这些通常称为本地提供者(native provider) 。
可以清楚地看出使用ODBC提供者意味着需要一个额外的层 。因此 , 当访问相同的数据时,针对ODBC的OLE DB提供者可能会比本地的OLE DB提供者的速度慢一些 。
C#OleDbCommand是干什么的OleDbCommand表示要对access数据源执行的sql语句或存储过程 。
具体用法:
OleDbConnection con=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; data source=data.mdb");
con.Open();
OleDbCommand dc=new OleDbCommand("select name from us where id=2", con);
textBox1.Text=dc.ExecuteScalar().ToString();
OleDbConnection con=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; data source=data.mdb");
con.Open();
OleDbCommand dc=new OleDbCommand("insert into us (name) values (11)", con);
dc.ExecuteNonQuery();
con.Close();
string us=textBox2.Text;
string pa=textBox1.Text;
OleDbConnection con=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; data source=data.mdb");
OleDbCommand oldC=new OleDbCommand("insert into users (username, userpassword) values (@username, @userpassword)", con);
oldC.Parameters.Add("@username", us);
oldC.Parameters.Add("@userpassword", pa);
con.Open();
oldC.ExecuteNonQuery();
con.Close();
MessageBox.Show("Register successful!");
this.Dispose();
c#oledbconnection连接数据库后怎么执行sql语句 public DataTable QueryDataTable(string queryStr){DataTable dt = new DataTable();OleDbConnection conn = new OleDbConnection(ConnectionString);OleDbDataAdapter adp = new OleDbDataAdapter(queryStr, conn);conn.Open();adp.Fill(dt);conn.Close();return dt;}//方法体的部分内容DBCommon db = new DBCommon();DataTable dt = new DataTable();OleDbConnection conn = new OleDbConnection(db.ConnectionString);OleDbCommand cmd = new OleDbCommand(countSql, conn);//查询数据总数,用于分页OleDbDataAdapter adp = new OleDbDataAdapter(sqlStr, conn);conn.Open();var rs = cmd.ExecuteScalar().ToString();//解决直接强制转换为int时出错的问题 。count = Int32.Parse(rs);adp.Fill(PageSize * (PageIndex - 1), PageSize, dt);conn.Close();
C# winfrom中OleDbConnection要导入什么命名空间?OleDbConnection属于link Ole类型数据库,既然是数据则命名空间在System.Data下,以是OleDB类型,所以需要using System.Data.OleDb;
visual studio 2010 c#里面怎么没有OleDbConnection等数据库控件这个不须要控件来表示,只要用new创建一个实例就可以用的,因为他是看不见的 。
在C#中,在添加按钮里,怎样定义多个oledbConnection对象,如何使用多个oledbConnection对象如果你偏要这样做的话,我可以说一下,不过我觉得你完全可以用两个按钮来实现.
按你说的话:
在你添加完进货信息后改变按钮的Text属性为"修改";在按钮的事件中写如下代码:
if(button1.Text.Trim()=="修改")
{
//做修改操作
}
else{ //做添加操作 }
C#,求一个可以正确调用OleDbConnection.Open()的System.Data.dll文件大多数情况是连接串的问题
System.Data是.net基础库中的一个程序集 一般这个文件不会出错
如果你用的是mono的话 可能会有奇怪的问题=A= 建议下载编译最新的mono尝试
oledb读取excel需要你有对应的引擎(换而言之就是执行环境
对于97-03的excel需要jet4.007+需要ace 12.0
建议下载最新版本的MDAC获得完整的引擎
或者 试图使用第三方库来读取excel比如npoi
c#中智能设备sqlconnection怎样加命名空间APP_CODE 写的类 在同一WEB项目的代码中使用不需要额外引用 。namespace N{ public Class XXX{}}在default.cs中只需要N.XXX x=new N.XXX 即可 。
c#中智能设备中sqlconnection怎样加命名空间APP_CODE 写的类 在同一WEB项目的代码中使用不需要额外引用 。namespace N{ public Class XXX{}}在default.cs中只需要N.XXX x=new N.XXX 即可 。
ADO.NET中OleDb命名空间下的OleDbConnection对象OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=数据库路径");
c#用excel做报表,必须导入oledb命名空间用sql语句吗?可以导入excel.dll吗?用sql不方便,还是用导入dll吧,忘记叫什么名字了...
OleDbConnection conn=new OleDbConnection(); 这句运行出错你的代码是不是:public OleConn{get{ return oleConn = new OleDbConnection(conStr); }}这样当然不行,因为你每次都是返回一个新的OleDbConnection(没有Open)当然会报错你可以用一个私有变量保存,或return前,先open,如:private OleDbConnection oleConn;public OleConn{get{ if(oleConn == null) oleConn = new OleDbConnection(conStr); return oleConn;}}或者:public OleConn{get{ oleConn = new OleDbConnection(conStr); oleConn.Open();return oleConn;}}
ConnectionString 属性尚未初始化 。怎么回事ConfigurationSettings.AppSettings["AccessConnectionString"],这句话是获取配置文件(就是*.Config文件)里面的AccessConnectionString节点中得值 , 你看看这个节点下面是否有值 , 连接字符串是否正确 。
conn = new OleDbConnection()和OleDbConnection conn = new OleDbConnection()是一个意思吗拜托了各位 是一样的! 前面的变量conn是在前面定义过的,只不过是在这里实例化 。后面的是定义conn变量然后就初始化 。一样
using(SqlConnection connection=new SqlConnection(connectionString)){}using()
{}
将自动释放()中对象占用的资源,就不用手动connection.Close();了
如果单独的SqlConnection connection=new SqlConnection(connectionString);
在处理完成了之后 , 还必须手动connection.Close();
其他的就没区别了 。
如何实现Oracel复制数据到SQL SERVER-CSDN论坛【oledbconnection】在项目中经常会遇到一个项目操作几个数据库的情况,若是同种类型的数据库也还好说,可以直接链接两个数据库,也可以用数据库的同步功能 。若我们的项目使用SQLServer2005进行开发,而且项目中要用到Oracle数据库中的数据 , 那么又该怎么实现拉?一般来说方案有以下几种 。
1.分别建立链接对数据库进行操作,SQLServer可以用ADO.NET,操作Oracle可以用OLEDB或者用System.Data.OracleClient(需要添加引用才能用)
这种方案的优点就是简单,各自写各自的数据库操作代码,缺点就是不能将两个数据库中的表直接进行联合查询,链接Oracle的每台机器必须安装OracleClient才可以使用 。
2.使用同义词操作Oracle数据库 。
这种方法的具体操作我在以前的文章中已经写清楚了 , 这样做一来可以进行表的联合查询二来不需要每台机器都安装OracleClient,但是还是有一个缺点:效率低,比如对同义词使用like去查找需要的数据,如果是直接连Oracle数据库也许只要0.1秒就可以找到答案 , 但是用同义词可能就要等10秒20秒或更久 。原来SQLServer并不是直接把查询语句传递给Oracle,让Oracle执行操作 , 而是将所有数据都取到SQLServer服务器上 , 边取数据边分析,直到满足查询条件为止 。其实这种数据放在两个服务器上还有一个缺点就是一旦Oracle服务器宕机,即使我们这边的所有服务器都是好的,那么我们的程序中用到Oracle数据的地方就无法使用 。
3.直接链接Oracle数据库+同义词+作业+异常跳转 方式 。
这种方法具体讲就是我们的程序直接用OLEDB(OracleClient)链接Oracle数据库,同时SQLServer服务器也建立了同义词指向Oracle,在SQLServer上建立作业,将同义词中的数据拷贝到SQLServer服务器的表中 。一旦Oracle宕机,程序中就会捕捉到异常,于是就使用SQLServer中的数据 。这样做比较复杂,需要一定的编程 , 效率也不是特别高,但是优点也是明细的,平时链接Oralce服务器,异常情况下链接SQLServer中的备份数据,保证了程序的正常运行 。
4.直接编写一个程序,以服务或自启动方式一直运行,每隔一段时间将Oracle数据库中的数据写到SQLServer数据库中 。
这种方法就是编程复杂,具有很大难度 。
5.利用SQLServer2005的复制功能将Oracle数据库中的数据同步到SQLServer服务器中,程序只操作SQLServer,不链接Oracle数据库 。
这种方法不需要编写任何代码 , 由于只对SQLServer进行查询,所以查询效率高可以做多表链接,开发人员也不需要再装OracleClient,也不用害怕Oracle服务器宕机导致我们的相关程序无法使用 。优点倒是很多,那么有没有缺点拉?缺点还是有的,主要是取得的数据不是实时的数据,Oracle那边的数据更新了 , 我们这边还有可能是老数据 。
前面的四种方法我就不用多讲了,这次主要是讲第五种方法的具体实现:
1.安装SQLServer复制功能 。
在安装SQLServer数据库的时候选上“复制”,将“复制”功能安装到服务器 。微软说如果第一次安装的时候没有装,以后再想添加该功能只需要运行安装程序将“复制”选上就可以了,不过说是这么说,我试了几次都不行,我也不知道怎么回事,为了安装上复制,所以将SQLServer卸载了,重新安装!这种方法很笨 , 不过我实现想不出其他办法了,希望高手指点 。
2.设置Oracle服务器端的权限 。
创建一个用于复制用的用户,授予下列权限:
CREATE PUBLIC SYNONYM 和 DROP PUBLIC SYNONYM
CREATE PROCEDURE
CREATE SEQUENCE
CREATE SESSION
还必须直接为用户授予下列权限(不是通过角色):
CREATE ANY TRIGGER 。
CREATE TABLE
CREATE VIEW
同时该用户还必须对要发布的表所在表空间有UNLIMITED的权限,还要针对每个要用于同步的表设置Select权限 。
3.SQLServer服务器上安装OracleClient10g
必须安装了才可以链接Oracle服务器 , 不推荐安装Oracle9i,即使我们要链接的Oracle是9i的 。安装完成以后重启SQLServer服务器 。用PLSQL或其他工具测试一下是否可以链接到Oracle服务器 。
4.设置SQLServer Agent权限
在SQLServer服务器上 新建用户,将该用户加为管理员,在“服务”中找到“SQLServer Agent”,将其启动用户改为该用户,重启该服务 。
5.配置分发
打开ManagementStudio右键“复制”节点,选中“配置分发”,按向导一步一步操作,将快照文件夹路径指定为一个专门的共享文件夹,其他都不用修改,完成配置分发 。
6.添加Oracle发布
右键“本地发布”->“新建Oracle发布”,启动Oracle发布向导 , 添加Oracle服务器,将在Oracle服务器上新建的用户密码输入 , 一直下一步,选快照发布,选中需要发布的表,选中“立即创建快照发布”和“计划运行快照代理”,计划时间就自己根据需要设定,“快照代理”选择“代理服务帐户”,发布名称填写需要的名称,比如“Test1”,然后点击完成 。这样就完成了发布工作 。
7.添加Oracle订阅
右键“本地订阅”->“新建订阅”运行向导,选中刚才新建的Test1发布 , 一般选中“推送订阅” , 指定要订阅的数据库(比如:mis),也就是要用来存储Oracle数据的数据库 , 订阅属性中选中用SQLServer代理用户运行,代理计划“连续运行”,初始化时间“立即”,然后创建订阅完成 。
这个时候我们打开订阅的数据库mis,我们可以看到其中添加了Oracle发布出来的表,而且这些内容会按照计划隔段时间同步Oracle数据一次 。
到此我们的同步完成 。
8.测试是否同步成功
用PLSQL往Oracle中写入数据,修改数据,删除数据 , 如果发布时候选中的是每一分钟运行快照代理一次,那么隔一分钟后,我们再去打开SQLServer中的表,我们可以看到其中的内容和Oracle一样进行了变化 。
PS:在“本地发布”下选中我们的发布,右键,“查看代理运行状态”可以看到我们的发布是否成功 。
在VS2010中如何链接上SQL SERVER2012 (ODBC方式)代码连接方法:string strCon="Driver=数据库提供程序名;Server=数据库服务器名;Trusted_Connection=yes;Database=数据库名;";OdbcConnection odbcconn=new OdbcConnection(strCon);连接了之后调用就可以了如果还是不懂 可以找个小例子看下就明白了
jsp中怎么连接sql2008的数据库啊 , 个数据库shopsystem,用户名sa 密码空 看下提示什么错误 再做修改)
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<%@ page import="java.sql.*"%>
<html>
<head><title>JDBC专用驱动程序连接SQL Server</title></head>
<%
Connection conn=null;
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String strConn="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shopsystem";
String strUser="sa";
String strPassword="";
conn=DriverManager.getConnection(strConn,strUser,strPassword);
out.println("<h2>JDBC专用驱动程序连接数据库成功!</h2>");
}
catch(ClassNotFoundException e)
{
out.println(e.getMessage());
}
catch(SQLException e)
{
out.println(e.getMessage());
}
finally
{
try
{
if (conn!=null)
conn.close();
}
catch(Exception e){}
}
%>
</html>
c# 相关问题:连接SQL数据库代码出错?。tring strConnection = " Data Source=PCPC-20090625HIOS\SQLEXPRESS 中包含一个转义字符"\",他会把之后的一个字符组合起来做转义:\S
你用两个斜杠试试.
PC-20090625HIOS\\SQLEXPRESS
求java程序连接非本地MySql 数据库的方法不重复别人说得了.你再看一下你的服务器的配置.有没有定义地址.如tomcat的config文件夹下的配置文件 。
using (OleDbConnection conn = new OleDbConnection(settings.ConnectionString))看看能有点用吗
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Data;
namespace DAL
{
public class DBHelper
{
private string connectionString= @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = "
+ Application.StartupPath + @"\Data\NMS.mdb";
/// <summary>
/// 执行增删改操作 返回int 类型
/// </summary>
/// <param name="sql"></param>
/// <param name="para"></param>
/// <returns></returns>
public static int GetScalar(string sql)
{
int result = 0;
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand(sql, conn);
result = cmd.ExecuteNonQuery();
conn.Dispose();
conn.Close();
}
return result;
}
c#.NET设计系统,数据库的问题??本文将详细介绍如何使用Connection对象连接数据库 。对于不同的.NET数据提供者 , ADO.NET采用不同的Connection对象连接数据库 。这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法 。
Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection 。
SqlConnection类的对象连接SQL Server数据库;OracleConnection 类的对象连接Oracle数据库;
OleDbConnection类的对象连接支持OLE DB的数据库,如Access;而OdbcConnection类的对象连接任何支持ODBC的数据库 。与数据库的所有通讯最终都是通过Connection对象来完成的 。
SqlConnection类
Connection 用于与数据库“对话” , 并由特定提供程序的类(如 SqlConnection)表示 。尽管SqlConnection类是针对Sql Server的,但是这个类的许多属性、方法与事件和OleDbConnection及OdbcConnection等类相似 。本章将重点讲解SqlConnection特定的属性与方法 , 其他的Connection类你可以参考相应的帮助文档 。
注意:使用不同的Connection对象需要导入不同的命名空间 。OleDbConnection的命名空间为System.Data.OleDb 。SqlConnection的命名空间为System.Data.SqlClient 。OdbcConnection的命名空间为System.Data.Odbc 。OracleConnection的命名空间为System.Data.OracleClinet 。
SqlConnection属性:
属性 说明
ConnectionString 其返回类型为string,获取或设置用于打开 SQL Server 数据库的字符串 。
ConnectionTimeOut其返回类型为int,获取在尝试建立连接时终止尝试并生成错误之前所等待的时间 。
Database 其返回类型为string,获取当前数据库或连接打开后要使用的数据库的名称 。
DataSource 其返回类型为string,获取要连接的 SQL Server 实例的名称 。
State 其返回类型为ConnectionState,取得当前的连接状态:Broken、Closed、Connecting、Fetching或Open 。
ServerVersion 其返回类型为string,获取包含客户端连接的 SQL Server 实例的版本的字符串 。
PacketSize 获取用来与 SQL Server 的实例通信的网络数据包的大?。ㄒ宰纸谖ノ唬?。这个属性只适用于SqlConnection类型
SqlConnection方法:
方法 说明
Close() 其返回类型为void,关闭与数据库的连接 。
CreateCommand()其返回类型为SqlCommand,创建并返回一个与 SqlConnection 关联的 SqlCommand 对象 。
Open()其返回类型为void,用连接字符串属性指定的属性打开数据库连接
SqlConnection事件:
事件 说明
StateChange当事件状态更改时发生 。(从 DbConnection 继承 。)
InfoMessage当 SQL Server 返回一个警告或信息性消息时发生 。
提示:可以用事件让一个对象以某种方式通知另一对象产生某些事情 。例如我们在Windows系统中选择“开始”菜单,一旦单击鼠标时,就发生了一个事件 , 通知操作系统将“开始”菜单显示出来 。
使用SqlConnection对象连接SQL Server数据库
我们可以用SqlConnection()构造函数生成一个新的SqlConnection对象 。这个函数是重载的,即我们可以调用构造函数的不同版本 。SqlConnection()的构造函数如下表所示:
构造函数 说明
SqlConnection ()初始化 SqlConnection 类的新实例 。
SqlConnection (String) 如果给定包含连接字符串的字符串 , 则初始化 SqlConnection 类的新实例 。
假设我们导入了System.Data.SqlClient命名空间,则可以用下列语句生成新的SqlConnection对象:
SqlConnection mySqlConnection = new SqlConnection();
程序代码说明:在上述语法范例的程序代码中,我们通过使用“new“关键字生成了一个新的SqlConnection对象,并且将其命名为mySqlConnection 。
现在我们就可以使用如下两种方式连接数据库,即采用集成的Windows验证和使用Sql Server身份验证进行数据库的登录 。
集成的Windows身份验证语法范例
string connectionString="server=localhost;database=Northwind;
integrated security=SSPI";
程序代码说明:在上述语法范例的程序代码中,我们设置了一个针对Sql Server数据库的连接字符串 。其中server表示运行Sql Server的计算机名,由于在本书中,ASP.NET程序和数据库系统是位于同一台计算机的 , 所以我们可以用localhost取代当前的计算机名 。database表示所使用的数据库名,这里设置为Sql Server自带的一个示例数据库--Northwind 。由于我们希望采用集成的Windows验证方式 , 所以设置 integrated security为SSPI即可 。
Sql Server 2005中的Windows身份验证模式如下:
注意:在使用集成的Windows验证方式时,并不需要我们输入用户名和口令,而是把登录Windows时输入的用户名和口令传递到Sql Server 。然后Sql Server检查用户清单,检查其是否具有访问数据库的权限 。而且数据库连接字符串是不区分大小写的 。
采用Sql Server身份验证的语法范例
string connectionString = "server=localhost;database=Northwind;uid=sa;pwd=sa";
程序代码说明:在上述语法范例的程序代码中 , 采用了使用已知的用户名和密码验证进行数据库的登录 。uid为指定的数据库用户名,pwd为指定的用户口令 。为了安全起见 , 一般不要在代码中包括用户名和口令,你可以采用前面的集成的Windows验证方式或者对Web.Config文件中的连接字符串加密的方式提高程序的安全性 。
Sql Server 2005中的Sql Server身份验证模式如下:
如果你使用其他的数据提供者的话,所产生的连接字符串也具有相类似的形式 。例如我们希望以OLE DB的方式连接到一个Oracle数据库,其连接字符串如下:
string connectionString = "data source=localhost;initial catalog=Sales;
use id=sa;password=;provider=MSDAORA";
程序代码说明:在上述语法范例的程序代码中,通过专门针对Oracle数据库的OLE DB提供程序 , 实现数据库的连接 。data source 表示运行Oracle数据库的计算机名,initial catalog表示所使用的数据库名 。provider表示使用的OLE DB提供程序为MSDAORA 。
Access数据库的连接字符串的形式如下:
string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;
@”data source=c:\DataSource\Northwind.mdb”;
程序代码说明:在上述语法范例的程序代码中 , 通过专门针对Access数据库的OLE DB提供程序 , 实现数据库的连接 。这使用的的OLE DB提供程序为Microsoft.Jet.OLEDB.4.0,并且数据库存放在c:\DataSource目录下 , 其数据库文件为Northwind.mdb 。
现在我们就可以将数据库连接字符串传人SqlConnection()构造函数,例如:
string connectionString = "server=localhost;database=Northwind;uid=sa;pwd=sa";
SqlConnection mySqlConnection = new SqlConnection(connectionString);
或者写成
SqlConnection mySqlConnection =new SqlConnection(
"server=localhost;database=Northwind;uid=sa;pwd=sa");
在前面的范例中 , 通过使用“new“关键字生成了一个新的SqlConnection对象 。因此我们也可以设置该对象的ConnectionString属性,为其指定一个数据库连接字符串 。这和将数据库连接字符串传人SqlConnection()构造函数的功能是一样的 。
SqlConnection mySqlConnection = new SqlConnection();
mySqlConnection.ConnectionString = "server=localhost;database=Northwind;uid=sa;pwd=sa";
注意:只能在关闭Connection对象时设置ConnectionString属性 。
打开和关闭数据库连接
生成Connection对象并将其设置ConnectionString属性设置为数据库连接的相应细节之后 , 就可以打开数据库连接 。为此可以调用Connection对象的Open()方法 。其方法如下:
mySqlConnection.Open();
完成数据库的连接之后,我们可以调用Connection对象的Close()方法关闭数据库连接 。例如:
mySqlConnection.Close();
下面是一个显示如何用SqlConnection对象连接Sql Server Northwind数据库的实例程序,并且显示该SqlConnection对象的一些属性 。
范例程序代码如下:
01 public partial class _Default : System.Web.UI.Page
02 {
03 protected void Page_Load(object sender, EventArgs e)
04 {
05 //建立数据库连接字符串
06 string connectionString = "server=localhost;database=Northwind;
07 integrated security=SSPI";
08 //将连接字符串传入SqlConnection对象的构造函数中
09 SqlConnection mySqlConnection = new SqlConnection(connectionString);
10 try
11 {
12 //打开连接
13 mySqlConnection.Open();
14 //利用label控件显示mySqlConnection对象的ConnectionString属性
15 lblInfo.Text = "<b>mySqlConnection对象的ConnectionString属性为:<b>" +
16 mySqlConnection.ConnectionString + "<br>";
17 lblInfo.Text += "<b>mySqlConnection对象的ConnectionTimeout属性为<b>" +
18 mySqlConnection.ConnectionTimeout + "<br>";
19 lblInfo.Text += "<b>mySqlConnection对象的Database属性为<b>" +
20 mySqlConnection.Database + "<br>";
21 lblInfo.Text += "<b>mySqlConnection对象的DataSource属性为<b>" +
22 mySqlConnection.DataSource + "<br>";
23 lblInfo.Text += "<b>mySqlConnection对象的PacketSize属性为<b>" +
24 mySqlConnection.PacketSize + "<br>";
25 lblInfo.Text += "<b>mySqlConnection对象的ServerVersion属性为<b>" +
26 mySqlConnection.ServerVersion + "<br>";
27 lblInfo.Text += "<b>mySqlConnection对象的当前状态为<b>" +
28 mySqlConnection.State + "<br>";
29 }
30 catch (Exception err)
31 {
32 lblInfo.Text = "读取数据库出错";
33 lblInfo.Text += err.Message;
34 }
35 finally
36 {
37 //关闭与数据库的连接
38 mySqlConnection.Close();
39 lblInfo.Text += "<br><b>关闭连接后的mySqlConnection对象的状态为:</b>";
40 lblInfo.Text += mySqlConnection.State.ToString();
41 }
42 }
43 }
程序代码说明:在上述范例的程序代码中 , 我们利用try catch finally对数据库连接进行异常处理 。当无法连接数据库时将抛出异常,并显示出错信息,见catch代码块所示 。在此程序中,无论是否发生异常,都可以通过finally区块关闭数据库的连接,从而节省计算机资源,提高了程序的效率和可扩展性 。
执行结果:
当然,我们还可以采用一种更加简便的方法来实现上述程序的功能 。这就是将SqlConnection对象包含到using区块中,这样程序会自动调用Dispose()方法释放SqlConnection对象所占用的系统资源 , 无需再使用SqlConnection对象的Close()方法 。
范例程序代码如下:
01 public partial class _Default : System.Web.UI.Page
02 {
03 protected void Page_Load(object sender, EventArgs e)
04 {
05 string connectionString = "server=localhost;database=Northwind;
06 integrated security=SSPI";
07 SqlConnection mySqlConnection = new SqlConnection(connectionString);
08 using (mySqlConnection)
09 {
10 mySqlConnection.Open();
11 lblInfo.Text = "<b>mySqlConnection对象的ConnectionString属性为:<b>" +
12 mySqlConnection.ConnectionString + "<br>";
13 lblInfo.Text += "<b>mySqlConnection对象的ConnectionTimeout属性为<b>" +
14 mySqlConnection.ConnectionTimeout + "<br>";
15 lblInfo.Text += "<b>mySqlConnection对象的Database属性为<b>" +
16 mySqlConnection.Database + "<br>";
17 lblInfo.Text += "<b>mySqlConnection对象的DataSource属性为<b>" +
18 mySqlConnection.DataSource + "<br>";
19 lblInfo.Text += "<b>mySqlConnection对象的PacketSize属性为<b>" +
20 mySqlConnection.PacketSize + "<br>";
21 lblInfo.Text += "<b>mySqlConnection对象的ServerVersion属性为<b>" +
22 mySqlConnection.ServerVersion + "<br>";
23 lblInfo.Text += "<b>mySqlConnection对象的当前状态为<b>"+
24 mySqlConnection.State + "<br>";
25 }
26 lblInfo.Text += "<br><b>关闭连接后的mySqlConnection对象的状态为:</b>";
27 lblInfo.Text += mySqlConnection.State.ToString();
28 }
29 }
程序代码说明:在上述范例的程序代码中 , 采用using(mySqlConnection)的形式使得代码更加简洁,并且其最大的优点就是无需编写finally区块代码,可以自动关闭与数据库的连接 。
连接池
打开与关闭数据库都是比较耗时的 。为此,ADO.NET自动将数据库连接存放在连接池中 。连接池可以大幅度提高程序的性能和效率,因为我们不必等待建立全新的数据库连接过程,而是直接利用现成的数据库连接 。注意,利用Close()方法关闭连接时,并不是实际关闭连接,而是将连接标为未用 , 放在连接池中,准备下一次复用 。
如果在连接字符串中提供相同的细节,即相同的数据库,用户名,密码等等,则可以直接取得并返回池中的连接 。然后可以用这个连接访问数据库 。
使用SqlConnection对象时,可以在连接字符串中指定max pool size,表示连接池允许的最大连接数(默认为100),也可以指定min pool size表示连接池允许的最小连接数(默认为0) 。下面的代码指定了SqlConnection对象的max pool size为10 , min pool size为5 。
SqlConnection mySqlConnection = new SqlConnection("server=localhost;database=Northwind;
integrated security=SSPI;"+"max pool size=10;min pool size=5");
程序代码说明:在上述范例的程序代码中,程序最初在池中生成5个SqlConnection对象 。池中可以存储最多10个SqlConnection对象 。如果要打开新的SqlConnection对象时,池中的对象全部都在使用中,则请求要等待一个SqlConnection对象关闭,然后才可以使用新的SqlConnection对象 。如果请求等待时间超过ConnectionTimeout属性指定的秒数,则会抛出异常 。
下面通过一个程序来显示连接池的性能优势 。在应用此程序过程我们要先引用System.Data.SqlClinet和System.Text命名空间 。
范例程序代码如下:
01 public partial class _Default : System.Web.UI.Page
02 {
03 protected void Page_Load(object sender, EventArgs e)
04 {
05 //设置连接池的最大连接数为5,最小为1
06 SqlConnection mySqlConnection =new SqlConnection(
07 "server=localhost;database=Northwind;integrated security=SSPI;"+
08 "max pool size=5;min pool size=1");
09 //新建一个StringBuilder对象
10 StringBuilder htmStr = new StringBuilder("");
11 for (int count = 1; count <= 5; count++)
12 {
13 //使用Append()方法追加字符串到StringBuilder对象的结尾处
14 htmStr.Append("连接对象 "+count);
15 htmStr.Append("<br>");
16 //设置一个连接的开始时间
17 DateTime start = DateTime.Now;
18 mySqlConnection.Open();
19 //连接所用的时间
20 TimeSpan timeTaken = DateTime.Now - start;
21 htmStr.Append("连接时间为 "+timeTaken.Milliseconds+"毫秒");
22 htmStr.Append("<br>");
23 htmStr.Append("mySqlConnection对象的状态为" + mySqlConnection.State);
24 htmStr.Append("<br>");
25 mySqlConnection.Close();
26 }
27 //将StringBuilder对象的包含的字符串在label控件中显示出来
28 lblInfo.Text = htmStr.ToString();
29 }
30 }
程序代码说明:在上述范例的程序代码中,我们将在连接池中重复5次打开一个SqlConnection对象,DateTime.Now表示当前的时间 。timeTaken表示从连接开始到打开连接所用的时间间隔 。可以看出,打开第一个连接的时间比打开后续连接的时间要长 , 因为第一个连接要实际连接数据库 。被关闭之后,这个连接存放在连接池中 。再次打开连接时,只要从池中直接读取即可,速度非常快 。
提示:String 对象是不可改变的 。每次使用 System.String 类中的方法之一时 , 都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间 。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵 。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类 。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能 。Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处 。
在ASP.NET 2.0中,使用了一种在运行时解析为连接字符串值的新的声明性表达式语法,按名称引用数据库连接字符串 。连接字符串本身存储在 Web.config 文件中的 <connectionStrings> 配置节下面,以便易于在单个位置为应用程序中的所有页进行维护 。
范例程序代码如下:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="Pubs" connectionString="Server=localhost;
Integrated Security=True;Database=pubs;Persist Security Info=True"
providerName="System.Data.SqlClient" />
<add name="Northwind" connectionString="Server=localhost;
Integrated Security=True;Database=Northwind;Persist Security Info=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<pages styleSheetTheme="Default"/>
</system.web>
</configuration>
程序代码说明:在上述范例的程序代码中,我们在Web.Config文件中的<connectionStrings> 配置节点下面设置了两个数据库连接字符串 , 分别指向pubs和Northwind两个示例数据库 。注意,在2.0中引进了数据源控件,例如SqlDataSource 控件,我们可以将SqlDataSource 控件的 ConnectionString 属性被设置为表达式 <%$ ConnectionStrings:Pubs %>,该表达式在运行时由 ASP.NET 分析器解析为连接字符串 。还可以为SqlDataSource 的 ProviderName 属性指定一个表达式,例如 <%$ ConnectionStrings:Pubs.ProviderName %> 。其具体的用法和新特征将在以后的章节进行详细的介绍 。现在有个基础的了解即可 。
当然 , 我们也可以用下面的方式从配置文件直接读取数据库连接字符串 。首先我们需要引用using System.Web.Configuration命名空间,该命名空间包含用于设置 ASP.NET 配置的类 。
string connectionString =ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;
程序代码说明:在上述范例的程序代码中,我们可以利用ConnectionStrings["Northwind"]读取相应的Northwind字符串 。同理以可以利用ConnectionStrings["Pubs"]读取相应的Pubs字符串 。
发布c#项目数据库路径的问题我的处理是:
程序运行目录(就是exe所在目录)
数据库路径:"程序运行目录/Database/db.mdb"
Connection连接数据库的字符串写成:Application.StartupPath+"/Database/db.mdb"
使用C#连接Access数据库时 , 出现问题如下:D:\test\test\test.mdb 改成 D:\\test\\test\\test.mdb试试
做C#.net 项目,如何使用app.config 文件来连接数据库,而不是反复的使用数据库连接代码(数据库为Access)包含命名空间System.Configuration
ConfigurationManager.ConnectionStrings("ButterflyFinance.Properties.Settings.ButterflyConnectionString").ConnectionString可取到
OleDbConnection con = conn(FileName); con.Open(); 读取EXCEL文件的时候出现了这个错误 。。求指点 。。连接字符串错误,或者是你的系统没有装Excel的OleDB驱动
C# 数据库问题 using System.Data; using System.Data.OleDb;SQL Server数据库 和OleDb区别? 答案是没区别,查询 , 执行都是一样的 , 只是针对与不同的数据库引擎而已?。?br>(string strSQL) 只是一个形参而已 , 代表你需要执行的sql语句,是你自己编写这个语句,然后当作参数传到方法里面去执行就可以了,你调试一下就知道了?。。?
c#程序出错:“System.Data.OleDb.OleDbException”类型的未经处理的异常出现在 System.Data.dll 中 。你这样麻烦了 , C#有个表格控件,直接自动判断行数,不用你每次new row() , 很方便的,你找着
C# 通过System.Data.OleDb实现对access表格里面不同的表的读取你不同的表里面都有一个唯一的且通用的键吗?
比如:ID
如果有你就可以用join子句连接查询 。像这样:
select tb_liver.liver, tb_eye.eye, tb_hand.hand
from tb_liver
inner join tb_eye on tb_liver.id=tb_eye.id
inner join tb_hand on tb_liver.id=tb_hand.id
where tb_liver.id=...
...
如果你只是想在不同的表里面查不同的内容,之间没有键相互连接,那么你简单地open一个oledbconnection,然后一个一个地查询就行了,不需要关闭前一个表,最后把这个connection给close就可以了 。因为你是连接到这个MDB的 , 不是连接到表的,所以也不存在关闭表的问题
c# winform 里面调用dll(System.Data.SQLite.DLL)的问题不需要啦,你只要判断当前是32还是64位,就可以了 。
if(Detect32or64()=="32")
{
// do 32bit things.
}
else if(Detect32or64()=="64")
{
//do 64bit things
}
/////////////////////////////判断方法(受操作系统和CPU双重影响)
public static string Detect32or64()
{
ConnectionOptions oConn = new ConnectionOptions();
System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\\\localhost", oConn);
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select AddressWidth from Win32_Processor");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);
ManagementObjectCollection oReturnCollection = oSearcher.Get();
string addressWidth = null;
foreach (ManagementObject oReturn in oReturnCollection)
{
addressWidth = oReturn["AddressWidth"].ToString();
}
return addressWidth;
}
System.data.oleDb.OleDbException:[DENETLIB][ConnectionOpen(Connect()).]SQL Server不存在或拒绝访问这是未能正常连接到指定数据的错误,可以先检查一下数据库是否处理于正常状态,另外,你的连接字符串中,如数据库名,用户名及密码等是否正确都要检查一下 。
private static OleDbConnection conn = new *** 出异常你特喜欢静态吗?这个层用静态,除了减慢程序,影响性能,还有个问题就是,报你意想不到的错误 。