无法通过ODBC连接到SQL Server

过去,我使用ADO访问SQL Server,ADO连接对象的连接字符串为:

Provider=sqloledb;Data Source=MYPC;Integrated Security=sspI;

其中MYPC是我的计算机的名称,而SQL Server作为默认实例安装在我的计算机上。

上面的连接字符串效果很好。

但是,现在据说ADO已过时,microsoft再次推荐ODBC(请参阅https://blogs.msdn.microsoft.com/sqlnativeclient/2011/08/29/microsoft-is-aligning-with-odbc-for-native-relational-data-access/),因此我必须修改代码以改为使用ODBC。

因此我将与SQL Server的连接更改为以下代码:

    cdatabase Database;

    //  Provider=sqloledb;Data Source=MYPC;Integrated Security=sspI;
    Database.OpenEx(_T("Driver = {SQL Native Client}; Server = MYPC; Trusted_Connection = yes;"),cdatabase::noOdbcDialog);

    Database.ExecuteSQL(_T("create database [MyDB2019] on primary (name=[MyDB2019_File],filename='F:\\MyDB2019.mdf')"));

    Database.Close();

但是,此代码不起作用。执行Database.OpenEx之后,将出现CDBException指示

  

未找到数据源名称,也未指定默认驱动程序。

为什么?

注意:我正在使用Visual C ++ 2008和ADO

taoguolin 回答:无法通过ODBC连接到SQL Server

错误/异常说明了问题所在(尽管乍一看似乎有点通用)。

“未找到数据源名称,也未指定默认驱动程序”

  

找不到数据源名称->您未指定DSN,但未指定   要使用DSN,请忽略此部分

  

并且未指定默认驱动程序->您打算使用驱动程序,因此这部分错误很可能适用于您。

     

语法上正确显示连接字符串:“ Driver = { Driver Name } ...”,因此下一个   步骤是检查您尝试使用的名为SQL Native Client的驱动程序是否存在   在您的计算机上。

“ SQL Native Client”是SQL Server 2005的驱动程序名称。 在SQL2008中,驱动程序名称获得了版本描述符

Driver={SQL Native Client},sql2005   
Driver={SQL Server Native Client 10.0},sql2008  
Driver={SQL Server Native Client 11.0},sql2012 and later  
Driver={ODBC Driver 11 for SQL Server},sql2012 and later,odbc appears in the name
Driver={ODBC Driver 13 for SQL Server}  
Driver={ODBC Driver 17 for SQL Server}

在计算机上查找已安装的“ SQL Native”和“ SQL Server ODBC驱动程序”驱动程序的简单方法是运行ODBC数据源管理器。在搜索框中输入Odbc数据源,或在命令/地址栏中输入odbcad32.exe(对于64位:%windir%\ system32 \ odbcad32.exe)

在ODBC数据源管理器中,切换到“驱动程序”选项卡,您将在这里找到所有可用的/已安装的驱动程序。

这是一个Powershell脚本,可使用odbc打开与localhost的连接。根据安装的驱动程序进行相应调整

cls
$conn = new-object system.data.odbc.odbcconnection 
$conn.connectionstring = 
# all these installed on my pc and working
#"Driver={SQL Server Native Client 11.0};Server=localhost; Database=master;Trusted_Connection=yes;" 
#"Driver={SQL Server};Server=localhost; Database=master;Trusted_Connection=yes;" 
#"Driver={ODBC Driver 11 for SQL Server};Server=localhost; Database=master;Trusted_Connection=yes;" 
"Driver={ODBC Driver 17 for SQL Server};Server=localhost; Database=master;Trusted_Connection=yes;" 

$conn.Open()
$conn.State
$conn.Close();

..和mfc按钮

void CMFCDBTestDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    CDatabase database;
    CString connectionstring = _T("Driver={SQL Server Native Client 10.0};Server=localhost;Trusted_Connection=yes;");
    CString messagetext;

    TRY{
        //database.Open(NULL,FALSE,connectionstring,FALSE); //ok
        database.OpenEx(connectionstring,CDatabase::noOdbcDialog); //ok

        if (database.IsOpen()){
            messagetext = _T("open,database:") + database.GetDatabaseName();
            database.Close();
        }
   }CATCH(CDBException,e) {
       messagetext = _T("Database error: ")+e->m_strError;
   }
   END_CATCH;

   AfxMessageBox(messagetext,0);
}
,

创建带有udl扩展名的文件。示例:test.udl 双击文件。使用GUI连接到数据库。完成后,使用记事本打开UDL文件并提取连接字符串。

请参见https://www.dmxzone.com/go/312/how-to-generate-an-ado-connection-string/

,

问题出在以下地方,因为连接字符串中的多余空格:

“驱动程序= {SQL Native Client};服务器= MYPC; Trusted_Connection =是;”

到(并更改驱动程序名称):

“ Driver = {SQL Server Native Client 10.0}; Server = MYPC; Trusted_Connection =是;”

连接将成功。

本文链接:https://www.f2er.com/2965580.html

大家都在问