把代码放在存储过程中执行,use master
go
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''')

解决方案 »

  1.   

    与执行其它存储过程没什么区别.
    1. sqlconnection 连接mssql系统数据库master.
    2. 执行sqlcommand  调用sp_attach_db 存储过程 
      

  2.   

    SqlCommand Cmd = new SqlCommand("myPro",Conn)
    Cmd.CommandType = CommandType.StoredProcedure;
    Cmd.ExecuteNonQuery();
      

  3.   

    /// <summary>
    /// 建立主数据库
    /// </summary>
    /// <returns>建立成功返回true,反之返回false</returns>
    private bool CreateMainDB()
    {
    string sql;
    int exeState;
    DbUtil db = new DbUtil();
    if (db.Connect(GetValue("ServerName"),GetValue("UID"),GetValue("PWD")))
    {
    sql = "CREATE DATABASE " + GetValue("NewDBName") + " ON ( NAME = " + GetValue("NewDBName"); 
    sql += "_dat,FILENAME = '" + SysUtil.CheckFilePath(GetValue("DBDir")) + GetValue("NewDBName"); 
    sql += ".mdf' ) LOG ON ( NAME = '" + GetValue("NewDBName") + "_log',FILENAME = '";
    sql += SysUtil.CheckFilePath(GetValue("DBDir")) + GetValue("NewDBName") + ".ldf' )"; exeState = db.ExecuteSQL(sql);
    db.Close();
     
    if (exeState == -1)
    {
    return true;
    }
    else
    {
    AddInfo(db.GetErrorMsg); 
    return false;
    }
    }
    else
    {
    AddInfo(db.GetErrorMsg); 
    return false;
    }
    } /// <summary>
    /// 执行一个Transact-SQL语句,并返回所影响的行数或返回代码
    /// </summary>
    /// <param name="sql"></param>
    /// <returns></returns>
    public int ExecuteSQL(string sql)
    {
    int result = 0;

    if (m_Conn.State == ConnectionState.Open)
    {
    SqlCommand cmd = new SqlCommand(sql,m_Conn);
    cmd.CommandTimeout = 300;

    try
    {
    result = cmd.ExecuteNonQuery();
    }
    catch(SqlException e) 
    {
    m_ErrorMsg = e.Message;
    SysUtil.MsgBox("Execute Transact-SQL Error! " + m_ErrorMsg,1);
    }
    }
    return result;
    }
      

  4.   

    和普通的存储过程查不多,要指定master,在sql语句前面加use master就可以了,或者连接字符串中不要指定数据库。
      

  5.   

    Hi,各位,帮我看一下下面的代码为什么报错
    String str = "server=localhost;database=master;uid=sa;pwd=victor";
    SqlConnection conn=new SqlConnection(str);
    conn.Open();
    SqlCommand comm = new SqlCommand("sp_attach_db",conn);
    comm.CommandType = CommandType.StoredProcedure;
    SqlParameter param;
    param = comm.Parameters.Add("@dbname", SqlDbType.NVarChar,10);
    param = comm.Parameters.Add("@filename1", SqlDbType.NVarChar,260);
    param = comm.Parameters.Add("@filename2", SqlDbType.NVarChar,260);
    comm.Parameters["@dbname"].Value = "bbb";
    comm.Parameters["@filename1"].Value = "c:\bbb_Data.MDF";
    comm.Parameters["@filename2"].Value = "c:\bbb_Log.LDF";
    comm.ExecuteNonQuery();
    错误信息:未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。其他信息: 系统错误
    不胜感谢!
      

  6.   

    public DataView GetDocCommentView(string docseq)
    {
    SqlConnection myConnection =new SqlConnection(strConn);
    SqlDataAdapter myCommand = new SqlDataAdapter("GetDocCommentInfo", myConnection); myCommand.SelectCommand.CommandType = CommandType.StoredProcedure; myCommand.SelectCommand.Parameters.Add(new SqlParameter("@DOC_SEQ",SqlDbType.Char,20));
    myCommand.SelectCommand.Parameters["@DOC_SEQ"].Value = docseq; DataSet ds = new DataSet();
    myCommand.Fill(ds, "sea");
    try
    {
    return ds.Tables["sea"].DefaultView;  
    }
    catch(System.Data.SqlClient.SqlException er)
    {
    throw new  Exception(er.Message);
    }
    finally
    {
    myCommand.Dispose() ;
    myConnection.Close() ;
    }
    }
      

  7.   

    引用自黄某人不养沙皮狗:
    SqlCommand Cmd = new SqlCommand("myPro",Conn)
    Cmd.CommandType = CommandType.StoredProcedure;
    Cmd.ExecuteNonQuery();
      

  8.   

    comm.Parameters["@filename1"].Value = "c:\bbb_Data.MDF";
    comm.Parameters["@filename2"].Value = "c:\bbb_Log.LDF";
    =================>>>>>>>>>>>>comm.Parameters["@filename1"].Value = "c:\\bbb_Data.MDF";
    comm.Parameters["@filename2"].Value = "c:\\bbb_Log.LDF";斜杠问题
      

  9.   

    类似这样调用就行了:
    string ErrMessage = null;
    string Sql = "dbo.sp_attach_db";System.Data.SqlClient.SqlParameter[] para = new System.Data.SqlClient.SqlParameter[3];
    para[0] = new System.Data.SqlClient.SqlParameter("@filename1", SqlDbType.VarChar);
    para[0].Value = @"D:\Projects\CSharp\DataBase\MyData_Data.MDF";
    para[1] = new System.Data.SqlClient.SqlParameter("@filename2", SqlDbType.VarChar);
    para[1].Value = @"D:\Projects\CSharp\DataBase\MyData_Log.LDF";
    para[2] = new System.Data.SqlClient.SqlParameter("@dbname", SqlDbType.VarChar);
    para[2].Value = @"MyData";SqlDataServer.ExecuteNonQuery(Sql, CommandType.StoredProcedure, para, out ErrMessage);
      

  10.   

    按你的代码改正后如下:String str = "server=localhost;database=master;uid=sa;pwd=victor";
    SqlConnection conn=new SqlConnection(str);
    conn.Open();
    SqlCommand comm = new SqlCommand("dbo.sp_attach_db",conn);
    comm.CommandType = CommandType.StoredProcedure;
    SqlParameter param;
    param = comm.Parameters.Add("@dbname", SqlDbType.NVarChar,10);
    param = comm.Parameters.Add("@filename1", SqlDbType.NVarChar,260);
    param = comm.Parameters.Add("@filename2", SqlDbType.NVarChar,260);
    comm.Parameters["@dbname"].Value = "bbb";
    comm.Parameters["@filename1"].Value = @"c:\bbb_Data.MDF";
    comm.Parameters["@filename2"].Value = @"c:\bbb_Log.LDF";
    comm.ExecuteNonQuery();