有别人保存的SQLserver数据库,扩展名为mdf。问题是在vb中用程序打开这个数据库时必须知道其数据库名(可能和mdf文件名不一致),那么如何得到这个数据库名呢?

解决方案 »

  1.   

    光是mdf文件没用的,要数据库服务器.没有服务器,是无法使用mdf文件的.
      

  2.   


    服务器肯定是有的。毫无疑问。
    事实上,别人的程序只要把mdf文件复制过来,然后选择该mdf就可以自动在server里添加进去并打开,我就是不知道是怎么做的。
      

  3.   

    右键attach操作,选择MDF文件,确定
      

  4.   


    调用sp_attach_db自己附加,自己当然知道数据库的名
      

  5.   


    1)我又看了一下人家的程序。mdf文件名和该程序在server里添加的数据库名并不相同,所以该程序还是通过什么方法知道了数据库名(或者可以自己随便定义?)。
    2)如何调用sp_attach_db(在存储程序里没有找到),命令怎么写?希望提供代码。
      

  6.   

    sp_attach_db
    将数据库附加到服务器。语法
    sp_attach_db [ @dbname = ] 'dbname'
        , [ @filename1 = ] 'filename_n' [ ,...16 ]参数
    [@dbname =] 'dbname'要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 [@filename1 =] 'filename_n'数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。该列表还必须包括数据库分离后所有被移动的文件。返回代码值
    0(成功)或 1(失败)结果集
    无注释
    只应对以前使用显式 sp_detach_db 操作从数据库服务器分离的数据库执行 sp_attach_db。如果必须指定多于 16 个文件,请使用带有 FOR ATTACH 子句的 CREATE DATABASE。如果将数据库附加到的服务器不是该数据库从中分离的服务器,并且启用了分离的数据库以进行复制,则应该运行 sp_removedbreplication 从数据库删除复制。权限
    只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行本过程。示例
    下面的示例将 pubs 中的两个文件附加到当前服务器。EXEC sp_attach_db @dbname = N'pubs', 
       @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
       @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'
      

  7.   


    如果在VB程序里执行sp_attach_db,以我个人水平,我需要先知道master数据库所在的位置,然后建立一个master的ado的connection。但是怎么知道master的位置呢?例如sqlserver2000可能安装在D盘。
    或者,不建立ado的connection可以从vb里直接调用sp_attach_db吗?
      

  8.   

    搞不懂楼主为何一定要用VB去attach,要么就写条语句sp_attach_db在管理器中执行或者直接菜单attach,这样不是更方便吗?
      

  9.   


    如果做一个软件还非要用户到管理器去手工操作不是对用户要求太高了吗?那样根本不用编软件了,直接写select命令不是更方便吗?
      

  10.   


    VB中也能调用啊?难道你想这样?
    [code=VB]Private Sub Form_Load()
    Dim cn As New ADODB.Connection
    cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=myserver"
    cn.Execute "sp_attach_db @dbname='testdb',@filename1='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\testdb.mdf' "
    End Subcode]
      

  11.   

    日,更新下
    [code=VB]Private Sub Form_Load() 
    Dim cn As New ADODB.Connection 
    cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=myserver" 
    cn.Execute "sp_attach_db @dbname='testdb',@filename1='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\testdb.mdf' " 
    End Sub[code]
      

  12.   

    无语,CSDN怎么不能显示VB代码?bug?
    Private Sub Form_Load() 
    Dim cn As New ADODB.Connection 
    cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=myserver" 
    cn.Execute "sp_attach_db @dbname='testdb',@filename1='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\testdb.mdf' " 
    End Sub
      

  13.   


    这个办法可以解决问题。但是需要建立多个connection。例如我要打开2个mdf的话,那么至少需要建立3个connection:一个master,另外2个针对2个mdf。
    1)3个connection需要很多内存吗?
    2)我觉得我这样好像比较傻。有更好的办法吗?
      

  14.   

    严重关注!
    请教zbc1009:
     mdf文件一定要数据库服务器才能打开使用吗?vb如何读取数据库?
      

  15.   


    --数据库附加
    EXEC sp_attach_db @dbname = N'chengyu',  
    @filename1 = N'c:\Downloads\chengyu.mdf',  
    @filename2 = N'c:\Downloads\chengyu_log.ldf'
    --数据库分离
    --只有sysadmin 固定服务器角色的成员才能执行sp_detach_db
    EXEC sp_detach_db 'chengyu','true'
      

  16.   

    为啥要建立3个connection啊?
    执行三次不就都打开了么?假设你有三个DB:
    Private Sub Form_Load() 
    Dim cn As New ADODB.Connection 
    cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=myserver" 
    cn.Execute "sp_attach_db @dbname='testdb1',@filename1='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\testdb1.mdf' " 
    cn.Execute "sp_attach_db @dbname='testdb2',@filename1='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\testdb2.mdf' " 
    cn.Execute "sp_attach_db @dbname='testdb3',@filename1='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\testdb3.mdf' " 
    End Sub
      

  17.   

    有mdf时,附加数据库,数据库名是自己安上去的.
      

  18.   


    我不是要attach三个mdf,而是要同时打开2个db以便随时读取里面的数据。再加master就是3个connection。