_bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student;uid=sa; pwd=123;";
ERROR:用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联。请按任意键继续. .
.会出现上面错误
我用的是 SQL2005 用windows账户登陆的 ,uid 和 pwd 在哪设置的?

解决方案 »

  1.   

    sa是你的sqlserver的用户,123是密码
      

  2.   

    怎么设置这个用户和密码?不设行么?我打开企业管理器是用windows 账户
      

  3.   

    方法一:
    企业管理/安全性(security)/选择账号sa属性/更改方法二:
    alter login [sa] with password=N'123'
      

  4.   

    用windows身份验证的话,一般不会出现sa登陆吧,用alter login把sa密码重新设成123再试下
      

  5.   

    该用户与可信 SQL Server 连接无关联。请按任意键继续还是会出现上面错误,用新账户和密码也会
      

  6.   

       1:开启SQL2005远程连接功能 
      配置工具->SQL Server外围应用配置器->服务和连接的外围应用配置器->打开SQLEXPRESS下的DataBase Engine节点,选择远程连接,选择“同时使用TCP/IP和named pipes”,确定后,重启数据库服务。 
      2:登录改为混合模式 
      打开管理器,用windows方式连接进入数据库,右键点击数据服务器-属性,安全性,在“服务器身份验证”下选择“SQL SERVER和windows身份验证模式”,"登录审核"选“失败和成功的登录”确定。 
      3:新建用户和密码,与sql2000类似,不做介绍 
      这样就可以用数据连接字符串进行连接了,比如(server=.\\sqlexpress;uid=sa;pwd=密码;database=数据库名称") 
      如果在用SQLServer模式连接的时候,报错“已成功与服务器建立连接,但是在登录过程中发生错误” 
      展开服务器上的"安全性"->登陆名->选中SA登陆帐号(右键)->状态->登陆修改为启用。
      

  7.   

    用户得认证方式是windows还是混合认证?先改为混合认证
      

  8.   

    无法打开登录所请求的数据库 "student"。登录失败。请按任意键继续. . .为什么我用sa 的可以,自己新建的就不行?
      

  9.   

    不过这是2000的
    /*--创建一个只允许特定程序使用的数据库用户 创建一个用户,这个用户只有用我们特定的应用程序登录
    才具有访问数据库的权限,用其他工具登录没有任何权限 在下面的示例中,演示了如何控制登录l_test
    使其登录后只允许访问pubs数据库的titles表
    而对jobs表的访问权限,只允许在某些许可的应用程序中访问。--邹建 2004.09(引用请保留此信息)--*/--创建测试环境
    USE pubs--创建一个登录 l_test, 密码 pwd, 默认数据库 pubs
    EXEC  sp_addlogin  'l_test','pwd','pubs' --为登录 l_test 在数据库 pubs 中添加安全帐户 u_test
    EXEC sp_grantdbaccess 'l_test','u_test'--授予安全帐户 u_test 对 titles 表的 SELECT 权限
    GRANT SELECT ON titles TO u_test--创建一个应用程序角色 r_p_test, 密码 abc
    EXEC sp_addapprole 'r_p_test','abc'--授予角色 r_p_test 对 jobs 表的 SELECT 权限
    GRANT SELECT  ON jobs TO r_p_test
    GO
    --创建好上面的测试后,现在来测试如何使用应用程序角色
    --我们把用户及密码告诉使用者,即告诉使用者,用户是: l_test,密码是: pwd
    --使用者可以用我们这个用户在任何地方登录,包含查询分析器
    --但是,用户只能访问 titles 表,不能访问其他对象,如果建立用户时不授予它任何权限,则它不访问除guest用户和public角色允许访问外的任何对象
    --OK,到这里,我们是把用户控制住了--下面我们再来说在程序中的处理,因为用户在程序中登录后,需要对jobs表有访问权限的
    --我们只需要在用户登录后,执行一句
    EXEC sp_setapprole 'r_p_test',{Encrypt N'abc'},'ODBC'
    --这样,我们登录的用户就转变为 r_p_test 角色的权限,而它自身的权限丢失
    --只要这个用户不退出应用程序,他的权限就会保持
    --如果用户退出了当前应用程序,则他的权限自动收回
    --同时,这个用户即使没有退出应用程序,他也是只在我们的应用程序中有权限,在其他地方登录,也不会有权限
    --因为这个密码我们是不用给用户的,所以,用户没有这个角色的密码,也就限制了他只能在程序中使用我们的数据--激活应用程序角色 r_p_test 前,登录具有表 titles 的访问权,但无表 jobs 的访问权
    SELECT titles_count=COUNT(*) FROM titles
    SELECT jobs_count=COUNT(*) FROM jobs
    /*--结果:
    titles_count 
    ------------ 
    18(所影响的行数为 1 行)服务器: 消息 229,级别 14,状态 5,行 2
    拒绝了对对象 'jobs'(数据库 'pubs',所有者 'dbo')的 SELECT 权限。
    --*/
    GO--用密码 abc 激活 r_p_test 应用程序角色,并且在将此密码发送到SQL Server之前对其加密
    EXEC sp_setapprole 'r_p_test',{Encrypt N'abc'},'ODBC'
    GO--激活应用程序角色 r_p_test 后,登录失去表 titles 的访问权,获取表 jobs 的访问权
    SELECT titles_count=COUNT(*) FROM titles
    SELECT jobs_count=COUNT(*) FROM jobs
    /*--结果
    服务器: 消息 229,级别 14,状态 5,行 2
    拒绝了对对象 'titles'(数据库 'pubs',所有者 'dbo')的 SELECT 权限。
    jobs_count  
    ----------- 
    14(所影响的行数为 1 行)
    --*/
    go--删除测试
    EXEC sp_dropapprole 'r_p_test'
    EXEC sp_revokedbaccess 'u_test'
    EXEC sp_droplogin 'l_test'
      

  10.   

    ALTER LOGIN SA WITH PASSWORD = '密码';
      

  11.   

    我也 碰到这个问题,我用C++连接sql server2000,注意是C++而不是MFC
    用的代码是
    #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
    no_namespace rename("EOF", "EndOfFile")
    #include <iostream>
    #include <iomanip> //for   setw()
    using namespace std;
    class STU
    {
    public:
    char snum[10]; //学号
    char sname[10]; //姓名
    char ssex[2]; //姓别
    long sage; //年龄
    char smajor[20]; //专业
    public:
    STU(){}
    ~STU(){}
    };
     
    int main()
    {
    STU student;
    ::CoInitialize(NULL); //初始化OLE/COM库环境,为访问ADO接口做准备
    _RecordsetPtr m_pRecordset("ADODB.Recordset");
    _ConnectionPtr m_pConnection("ADODB.Connection");
        _bstr_t bstrSQL("select * from stu_info"); //查询语句
    char * query_cmd = "DELETE FROM stu_info WHERE sname = '本拉登'";
        try
    {
    //创建Connection对象
    m_pConnection.CreateInstance("ADODB.Connection");
    //设置连接字符串,必须是BSTR型或者_bstr_t类型
    //_bstr_t strConnect = "Provider=SQLOLEDB;Server=(local);Database=vbdb; uid=sa; pwd=123;";
    //_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\192.168.1.10\\共享\\EASSON.mdb;Mode=Share Deny Read|Share Deny Write;Persist Security Info=False";
    _bstr_t strConnect = "Provider=SQLOLEDB;Server=(local);Database=vbdb; uid=sa; pwd=sa;";
    //若数据库在网络上则Server为形如(192.168.1.5,3340)
    //用户sa和密码123只是针对我的库
    m_pConnection->Open(strConnect,"","",adModeUnknown);
    if(m_pConnection==NULL)
    cerr<<"Lind data ERROR!\n";
    //创建记录集对象
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    //取得表中的记录
    m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    _variant_t vsnum,vsname,vsage,vssex,vsmajor; //对应库中的snum,sname,sage,ssex,smajor
    cout << "学号                     姓名                     年龄         姓别         专业";
    cout << "\n----------------------------------------------------------------\n";
    while(!m_pRecordset->EndOfFile)
    {
    vsnum = m_pRecordset->GetCollect(_variant_t((long)0)); //这儿给字段编号和字段名都可以
    vsname = m_pRecordset->GetCollect("sname");
    vsage = m_pRecordset->GetCollect("sage");
    vssex = m_pRecordset->GetCollect("ssex");
    vsmajor = m_pRecordset->GetCollect("smajor");
    if(vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL && vssex.vt != VT_NULL && vsmajor.vt != VT_NULL)
    {
    cout.setf(ios::left);
    cout << setw(14) << (char*)(_bstr_t)vsnum;
    cout << setw(14) << (char*)(_bstr_t)vsname;
    cout << setw(8) << vsage.lVal;
    cout << setw(8) << (char*)(_bstr_t)vssex;
    cout << setw(20) << (char*)(_bstr_t)vsmajor;
    cout.unsetf(ios::left);
    cout << endl;
    }
    m_pRecordset->MoveNext(); ///移到下一条记录
    }
    cout << "\n----------------------------------------------------------------\n";
    cout << "\n请输入你要添加的学生信息\n";
    cout << "学号:";
    cin >> student.snum;
    cout << "\n姓名:";
    cin >> student.sname;
    cout << "\n年龄:";
    cin >> student.sage;
    cout << "\n姓别:";
    cin >> student.ssex;
    cout << "\n专业:";
    cin >> student.smajor;
    m_pRecordset->MoveFirst(); //移动到第一条记录
    m_pRecordset->AddNew(); //添加新记录
    m_pRecordset->PutCollect("snum",_variant_t(student.snum));
    m_pRecordset->PutCollect("sname",_variant_t(student.sname));
    m_pRecordset->PutCollect("sage",_variant_t(student.sage));
    m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
    m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
    m_pRecordset->Update();
    m_pConnection->Execute(query_cmd,NULL,1); //用Execute执行sql语句来删除
    m_pRecordset->Close(); //关闭记录集
    }catch(_com_error e) //捕捉异常
    {
    //显示错误信息
    cerr << "\nERROR:" << (char*)e.Description(); //抛出异常
    }
    if(m_pConnection->State)
    m_pConnection->Close();
    ::CoUninitialize();
    return 0;
    }   
    给出的错误是:
    ERROR:无法打开登录 'vbdb' 中请求的数据库。登录失败。
    我的数据库的名称叫做"vbdb",请高手指教!!!