我在KAMPU\服务器下有一个USER用户,是SQL SERVER验证的,sql server服务器就在本机上,老是提示“该用户与可信的SQL SERVER连接无关联”,有人碰到同样的问题吗?用的是SQL SERVER2005 。

解决方案 »

  1.   

    我定义了个MyDatabase类MyDatabase.h文件:#pragma oncetypedef class MyDatabase
    {
    public:
    _ConnectionPtr m_pConnectionPtr;//connection to database
    _bstr_t strConnection;
    _bstr_t Provider;
    _bstr_t Server;
    _bstr_t Database;
    _bstr_t uid;
    _bstr_t pwd;
    // operate the recordset
    _RecordsetPtr m_pRecordsetPtr; public:
    MyDatabase(void);
    public:
    ~MyDatabase(void);
    public:
    bool DatabaseConnection();
    bool InitConnectionStr(_bstr_t,_bstr_t,_bstr_t,_bstr_t,_bstr_t);
    }*lpMyDatabase;
    是MyDatabase.cpp
    #include "StdAfx.h"
    #include "MyDatabase.h"MyDatabase::MyDatabase(void)
    {
    Provider="";
    Server="";
    Database="";
    uid="";
    pwd="";
    strConnection="";
    m_pConnectionPtr=NULL;
    m_pRecordsetPtr=NULL;



    }MyDatabase::~MyDatabase(void)
    {

    }
    bool MyDatabase::DatabaseConnection()
    {
    HRESULT hr=m_pConnectionPtr.CreateInstance(__uuidof(Connection));
    if(FAILED(hr))
    {
    AfxMessageBox(_T("Create Instance Failure!"));
    return false;
    }
    try
    {
    hr=m_pConnectionPtr->Open(strConnection,uid,pwd,adModeUnknown);
    if(SUCCEEDED(hr))
    {
    AfxMessageBox(_T("Open success"));
    return true;
    }
    else 
    {
    AfxMessageBox(_T("Failure!"));
    return false;
    }
    }
    catch(_com_error &e)
    {
    e.ErrorMessage();
    return false;
    }

    }
    bool MyDatabase::InitConnectionStr(_bstr_t temProvider,_bstr_t temServer,_bstr_t \
       temDatabase,_bstr_t temuid,_bstr_t tempwd)
    {

    Provider="Provider="+temProvider;
    Server="Server="+temServer;
    Database="Database="+temDatabase;
    uid="uid="+temuid;
    pwd="pwd="+tempwd;
    strConnection=Provider+";"+Server+";"+Database+";";
    return true;
    }
      

  2.   

    接着我在MainFrm.h 包含了
    #include "MyDatabase.h"
    并定义了一个MyDatabase m_MyDatabase;
    然后在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数里调用bool OK=m_MyDatabase.InitConnectionStr("SQLOLEDB","kampu","FamilyHistory","kampu","");
    if(OK)

    {
    OK=m_MyDatabase.DatabaseConnection();
    if(OK)
    {
    AfxMessageBox(_T("连接成功!"));
    }
    else AfxMessageBox(_T("连接失败!"));
    }
    else AfxMessageBox(_T("Connection String Failure!"));连接老是失败(前提已经做过AfxOleInit())
    有没有高人一起帮忙解决
      

  3.   

    检查一下, 连接时使用的连接字符串是否是正确的.并确定在manger studion用这个用户登录是正常的.
      

  4.   

    上面的代码我我检查过连接字符串是有问题的,调试过,  就是连接字符串那出问题的。hr=m_pConnectionPtr->Open(strConnection,uid,pwd,adModeUnknown);该句失败了。
    但是我用manager studiou用该用户登陆仍然不行,我把我的帐户说明一下:
    在我的SQL SERVER里有两个帐户,一个采用WINDOWS验证登陆的(就是上面的kampu),能够用MANAGER STUDIO登陆,另外一个采用的是采用SQL SERVER验证,但是不能用MANAGER STUDIO登陆
      

  5.   

    用了配置数据源的方法,Kampu可以登陆,是不是服务器上不能用SQL SERVER验证登陆,只有客户端才可以,我开始在工程向导的时候没有数据库支持。是不是没有加载SQLOLEDB驱动,所以就不能m_MyDatabase.InitConnectionStr("SQLOLEDB","kampu","FamilyHistory","kampu","");这样连。
      

  6.   

    (L"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=FamilyHistory;Data Source=kampu;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=KAMPU; \
    Use Encryption for Data=False;Tag with column collation when possible=False")我用了这样的字符串,成功,是用向导生成的,内容太多了,不知道哪里有介绍数据库连接的,这里哪些可以忽略,好象很多连接字符串的参数很少的,如果手动是不是太麻烦了
      

  7.   

    用manager studiou用该用户登陆仍然不行这说明是登录或者是服务器设置的问题楼主最后提到的自动生成的连接串成功了, 是因为使用的是windows身份验证, 判断的依据:Integrated Security=SSPI
      

  8.   

    基本上可以说明, 楼主的sql server只开启了"windows身份验证", 所以是无法用sql用户登录的.
      

  9.   

    解决的方法:
    manger studio连接到你的实例, 打开"对象资源管理器"(按F8), 右键实例--属性--安全性--服务器身份验证--选择"sql server和windows"--确定然后再重新启动sql服务即可.
      

  10.   

    成功~~~  
    我还有两个问题用VC2005时:
    1、很快内存就跑到1G多。不知道怎么回事。我用new申请的资源都有释放的。
    2、还碰到一个奇怪的问题:当工程运行的时候,如果我连接数据库就不会有错误产生,如果不连数据库,就会跳出错误,不知道这是怎么回事?!
    (如果上面两大问题解决,明天就可以结帖了)非常感谢zjcxc(邹建) 帮忙