我试图通过python连接到SQL以在Microsoft SQL服务器上的某些SQL数据库上运行一些查询.从我在网上的研究和这个论坛上看来,最有前途的图书馆似乎是pyodbc.所以我做了以下代码
import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+;
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)
并得到以下错误
Traceback (most recent call last):
File "C:\Users...\scrap.py", line 3, in <module>
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true")
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)
我查看了下面的帖子,并尝试将我的驱动程序更改为{sql server}并在SAS之前使用ODBC链接进行连接,这部分是我上面的代码所基于的,所以不要认为我需要安装其他任何东西.
pyodbc.Error:('IM002','[IM002] [unixODBC] [驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序(0)(SQLDriverConnect)')
Pyodbc - "未找到数据源名称,并且未指定默认驱动程序"
谢谢
OLEDB和ODBC有什么区别?我何时使用哪个?如何知道我在看OLEDB驱动程序v/s ODBC驱动程序?
在连接到多个可能的数据源(与数据库无关)方面,C#中每个上述数据库连接方法的主要优点是什么?另外在性能方面可能会提供全面的最佳性能?
最后有什么理由可以避免使用与数据库无关的应用程序的特定方法吗?
我问的原因是因为我的应用程序目前使用Ole而且我在使用工厂连接到某些数据库时遇到了一些问题,因此我正在研究替代方案.我听说Odbc比Ole慢,但是这背后是否有任何真相,它是否真的在真实应用程序中引人注目?
我对此主题感兴趣的原因如下:
我对当前项目的要求表明,我必须有一个工作数据访问层,它能够在不事先了解所述数据库的情况下连接到任何数据库.因此,就连接而言,我无法对任何给定数据库的特定内容进行硬编码.已经使用sql查询工厂类型概念处理了对每个给定数据库运行方言特定语句.绑定变量的替换和格式化也是如此.
更新:目前我现在有一个工作版本的代码,它使用ADO.net和数据库提供程序工厂.这意味着我正在使用Adam Houldsworth建议的基类.提供程序在providerName属性下的连接字符串中指定.连接字符串存储在app.config中,可以通过我的数据库连接类检索它.如果已经安装了正确的驱动程序,如npgsql或Oracle的odac包,那么工厂将正常工作.下面是我的代码示例,显示了使用提供程序工厂的连接对象的基本构造函数.
private readonly DbFactoryBindVariables m_bindVariables;
private readonly DbProviderFactory m_provider;
private string m_connectionString = String.Empty;
private readonly string m_providerName = String.Empty;
private DbConnection m_dbFactoryDatabaseConnection;
/// <summary>
/// Default constructor for DbFactoryDatabaseConnection.
/// </summary>
public DbProviderFactoryConnection()
{
m_providerName = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ProviderName;
m_provider = DbProviderFactories.GetFactory(m_providerName);
m_dbFactoryDatabaseConnection = m_provider.CreateConnection();
m_connectionString = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ConnectionString;
m_dbFactoryDatabaseConnection.ConnectionString = m_connectionString;
m_bindVariables = new DbFactoryBindVariables(m_dialect.ToLower(), DbFactoryBindSyntaxLoader.Load(this));
}
Run Code Online (Sandbox Code Playgroud)
如果您所选择的.net框架版本的machine.config中尚未包含类似于以下内容的内容,则可能需要将其添加到app.config或web.config中.
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider"
invariant="Npgsql"
support="FF"
description=".Net Framework Data Provider for Postgresql Server"
type="Npgsql.NpgsqlFactory, …Run Code Online (Sandbox Code Playgroud) 我有一个SQL Server数据库,我需要通过vbscript将数据推送到它,以及将数据拉入Excel.我找到了多个连接字符串,但是没有存储库可以比较它们的性能和功能.Provider=到目前为止我找到的驱动程序选项()是:
我读到的不同的东西说ODBC更好,因为它已经存在更长时间.并且OLE DB已经存在足够长的时间以具有相同的优势.并且OLE DB可以与某个公司的应用程序一起使用.ODBC是由同一家公司制作的.OLE DB可以更好地连接到不同类型的应用程序.ODBC对数据库的效果更好.原生是......原生,所以必须更好......因为这个名字?
我发现这里有多个问题,没有或部分答案,或者有多个评论声称答案已经过时了.那么,截至目前,这些不同驱动因素之间的具体差异是什么?他们在不同情况下有不同的表现吗?他们有不同的功能吗?我是否需要进行性能分析以确定我的特定用例的最佳性能和可靠性,或者是否有Microsoft或某些公认的专家推荐的标准"最佳实践"?或者它们基本上都在做同样的事情,只要它安装在目标系统上并不重要吗?