谁能提供一个用VS.NET实现数据库(SQL DataBase)安装部署的DEMO,(目的是实现数据库的安装)
能够生成数据库,删除数据库

解决方案 »

  1.   

    数据库的安装与删除都是通过执行脚本实现的。在安装工程的customAction中执行这些脚本就行了。
      

  2.   

    大致思路如下:
    1、把已经生成好的数据库导出SQL语句,并存成文件(SQL Server导出的文件格式是文本类型);
    2、.Net程序的功能,读出上面的文本文件,然后通过输入的数据库参数,连接数据库,并执行文本文件的内容,从而达到数据库的部署;
      

  3.   

    连接数据库的时候的参数,如下:
    "Data   Source=yourServerName;User   id=yourUserID;Password=YourPwd;   Initial   Catalog=master";注意:
    其中yourServerName、yourUserID、YourPwd是要定制的,但是“master”不能改变。
      

  4.   

    思想我也知道应该从SQL数据库的脚本中实现.
    但有没案例呢..谢谢了
      

  5.   

    I paste my sample in my blog
    http://blog.csdn.net/Knight94/archive/2006/03/18/627995.aspx
      

  6.   

    部署安装时写入SQL SERVER和Web.config 
    http://overred.cnblogs.com/archive/2006/02/18/333004.html
      

  7.   

    Knight94(愚翁) 
    很感谢你提供的网页,但测试后发现在读取SQL文本那个类出了错,系统提示:'CreateProc'must
    be the firstStatement in a  query bach 是错哪里了?按你的方法,我对SQL文本前头更改了一下。应该是符合你的要求了,而且通过分析器也可以执行通过。
    use master
    GO
    if exists (select * from sysdatabases where name='SaleSystem')
    drop database SaleSystem
    GO
    create database SaleSystem
    GO
    use SaleSystem
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[BigDoor_Proc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[BigDoor_Proc]
    GO
      

  8.   

    //操作数据库对象
      #region operateDataBase(DDL)  /// <summary>
      /// 附加数据库
      /// </summary>
      /// <param name="strCon">连接字符串</param>
      /// <param name="DBName">要生成的数据库名</param>
      /// <param name="strMdf">mdf文件位置</param>
      /// <param name="strLdf">ldf文件位置</param>
      /// <returns></returns>
      public bool attachDB(string strCon,string DBName,string strMdf,string strLdf)
      {
       bool bl=true;
       try
       {
        cnn.ConnectionString=strCon;
        if (cnn.State!=ConnectionState.Open)
         cnn.Open();
       
        cmd.Connection=cnn;
        cmd.CommandText=@"sp_attach_db";
        cmd.Parameters.Add(new OleDbParameter("@dbname",OleDbType.VarChar));
        cmd.Parameters["@dbname"].Value=DBName;
        cmd.Parameters.Add(new OleDbParameter("@filename1",OleDbType.VarChar));
        cmd.Parameters["@filename1"].Value=strMdf;
        cmd.Parameters.Add(new OleDbParameter("@filename2",OleDbType.VarChar));
        cmd.Parameters["@filename2"].Value=strLdf;    cmd.CommandType=CommandType.StoredProcedure;
        cmd.ExecuteNonQuery();
       }
       catch
       {
        bl=false;
       }
       finally
       {
        cnn.Close();
       }
       return bl;  }
      
      /// <summary>
      /// 分离数据库
      /// </summary>
      /// <param name="strCon">连接字符串</param>
      /// <param name="DBName">数据库名</param>
      /// <returns></returns>
      public bool detachDB(string strCon,string DBName)
      {
       bool bl=true;
       try
       {
        cnn.ConnectionString=strCon;
        if (cnn.State!=ConnectionState.Open)
         cnn.Open();
       
        cmd.Connection=cnn;
        cmd.CommandText=@"sp_detach_db";
        cmd.Parameters.Add(new OleDbParameter("@dbname",OleDbType.VarChar));
        cmd.Parameters["@dbname"].Value=DBName;    cmd.CommandType=CommandType.StoredProcedure;
        cmd.ExecuteNonQuery();
       }
       catch
       {
        bl=false;
       }
       finally
       {
        cnn.Close();
       }
       return bl;
      }  /// <summary>
      /// 备份数据库
      /// </summary>
      /// <param name="strCon">连接字符串</param>
      /// <param name="DBName">数据库名</param>
      /// <param name="backupName">备份名</param>
      /// <param name="backupFile">备份文件位置</param>
      /// <returns></returns>
      public bool BackUpDB(string strCon,string DBName,string backupName,string backupFile)
      {
       bool bl=true;
       try
       {
        cnn.ConnectionString=strCon;
        if (cnn.State!=ConnectionState.Open)
         cnn.Open();    cmd.Connection=cnn;
        cmd.CommandText=@"BACKUP DATABASE "+DBName+" to disk='"+backupFile+"'"+
         "WITH  NOINIT ,  NOUNLOAD ,  NAME = N'"+backupName+"',  NOSKIP ,  STATS = 10,  NOFORMAT ";
        cmd.CommandType=CommandType.Text;
        cmd.ExecuteNonQuery();
       }
       catch
       {
        bl=false;
       }
       finally
       {
        cnn.Close();
       }
       return bl;
      }  /// <summary>
      /// 还原数据库
      /// </summary>
      /// <param name="strCon">连接字符串</param>
      /// <param name="DBName">数据库名</param>
      /// <param name="backupFile">备份文件位置</param>
      /// <returns></returns>
      public bool restoreDB(string strCon,string DBName,string backupFile)
      {
       bool bl=true;
       try
       {
        cnn.ConnectionString=strCon;
        if (cnn.State!=ConnectionState.Open)
         cnn.Open();    cmd.Connection=cnn;
        cmd.CommandText=@"RESTORE FILELISTONLY from disk='"+backupFile+"'";
        cmd.CommandType=CommandType.Text;
        cmd.ExecuteNonQuery();
       }
       catch
       {
        bl=false;
       }
       finally
       {
        cnn.Close();
       }
       return bl;
      }  #endregion
      

  9.   

    是不是你的数据库中含有storeprocedure,我以前试的是没有的,我再试试,稍后再回复。
      

  10.   

    替换以下我所写的CreateDB函数,用如下的即可:
    private bool CreateDB( ref SqlConnection sqlConn )
    {
    string strQuery;
    string[] strComms;
    bool blnBreaked = false;
    if( ReadSQLFromFile( out strQuery ) )
    {
    strQuery = strQuery.Replace( "GO\r\n", ";" );
    strComms = strQuery.Split( ';' ); SqlCommand sqlComm = new SqlCommand();
    sqlComm.Connection = sqlConn; foreach( string strComm in strComms )
    {
    sqlComm.CommandText = strComm;
    try
    {
    sqlComm.ExecuteNonQuery();
    }
    catch( SqlException sqlErr )
    {
    MessageBox.Show( sqlErr.Message );
    blnBreaked = true;
    break;
    }
    catch{
    blnBreaked = true;
    break;
    }
    }

    sqlComm.Dispose();
    if( !blnBreaked ) return true;
    }
    return false;
    }
      

  11.   

    谢谢Knight94(愚翁) 和以上回答问题的朋友。
    分数已经给了 谢谢回答。