最近做C#项目遇到打包问题,客户那边不需要让装SQL Server所以得把数据库打包出来现网上so了一下,有个解决方案,不过不是很详细;希望高手们共享这个方案,谢谢
附上:
2.2 通过把脚本文件作为资源文件载入    从前面的讨论中我们可以看到,直接使用ADO.net执行时比较麻烦,需要一句句执行,如果使用脚本,数据库中生成的脚本中有”GO”命令,在ADO.net中执行时会出问题。因此,根据对数据库安装脚本的分析,我们可以采用如下替代方案。
在数据库的安装过程中,无外乎如下几个部分: 
(1) 创建数据库
(2) 创建表
(3) 创建试图或者存储过程
并且这三个部分是有先后顺序的,顺序不能颠倒,但是每个过程中没有顺序关系。在测试过程中我们发现可以在一条语句中创建多个表或者多个存储过程。也就是说,我们可以把执行过程按照上面的顺序执行就行了。并且我们把数据库脚本作为资源文件嵌入,只要调入执行就可以了,这样就达到了简化创建一条条命令的过程。
获得资源文件代码如下:
Assembly Asm=Assembly.GetExecutingAssembly();
StreamReader str;
str=new StreamReader(Asm.GetManifestResourceStream(Asm.GetName().Name+"."+filename))// filename为你需要摘入的资源文件。作为资源文件时,只要把文件导入到您的项目中,并且把生成操作改为嵌入的资源即可。
这里我们是直接获得了该文件的文件流,因此直接把该流中的内容读入即可。
我们可以通过如下操作完成:
(1) 建立一个数据库的链接,创建数据库. 比如: connectionstring=”server=127.0.0.1,uid=sa,pwd=pwd”;
(2) 重新创建一个数据库链接,该链接指向创建的数据库。connectionstring=”server=127.0.0.1,uid=sa,pwd=pwd,database=yourdatabase”;
(3) 在新的链接中执行创建数据表和数据存储过程的代码即可。这种解决方案有没有详细介绍???

解决方案 »

  1.   

    如果是数据库的部署,你可以进行数据库备份和恢复,要简单写;如果是通过脚本进行执行的话,可以参看
    http://blog.csdn.net/knight94/archive/2006/03/19/628871.aspx
      

  2.   

    客户那边不需要让装SQL Server所以得把数据库打包出来???
    不装SQL Server??数据库放在哪啊
      

  3.   

    可以不安装SQL Server 但要安装MSDE 就像是.NET快速入门的安装程序.
      

  4.   

    reference:
    http://news.softhouse.com.cn/news/show/691.html
      

  5.   

    楼主是不是这个意思啊,把数据库的备份打进包中,装上SQLSERVER以后真接用程序恢复就用。如果是这样看看这个贴子
    http://community.csdn.net/Expert/topic/4397/4397679.xml?temp=.1123316
      

  6.   

    HOHO, 高手不少,进来学习学习
      

  7.   

    我也有试过msde的安装可是装完后也要配置吧!配置不懂了~~~哎
      

  8.   

    To : bhwhy(苏秦)
    我不是你那个意思,客户机上是不装SQL Server 的  恢复是很简单的事情
      

  9.   

    TO:Knight94(愚翁) 
    你给的连接是备份、恢复数据库,而客户机上要装上SQL Server 才能做这个操作吧!这样的话还不是我的目的
      

  10.   

    你不会是想把sql server的安装也做进去吧?
      

  11.   

    TO:Knight94(愚翁)
    不是,我的意思是客户机上不能装上SQL Server   我的程序打包后在客户机上装上后就可以像文件一样访问这个备份数据库   这才是我想要的   谢谢你   Knight94(愚翁)
      

  12.   

    你可以采用b/s架构的操作,客户端自然不拥装sql,实际你的程序还是c/s的,我们目前就采用这种架构,所有的连接和操作数据库都在服务器上
      

  13.   

    我目前是c/s 而有两种版本一种是网络版还有就是单机版,网络版当然很好解决,连上服务器就OK了,而单机版就要打包个数据库,因为客户机上不可能给他装上SQL Server
      

  14.   

    附上:
    2.2 通过把脚本文件作为资源文件载入楼主写的这个东西是什么意思?
    这个东西我弄过,那是在安装包中直接安装数据库用的。你客户机上没数据库,这个方法没什么用处!
    楼主是不是要用直接嵌在程序里的数据库啊,如果是,可以考虑SQLIME
      

  15.   

    To:jedliu(21世纪什么最贵? 人才!)是你说的这种意思。SQLIME是什么东西来着,能详细点介绍吗?
      

  16.   

    使用VS2005部署带有数据库的Web站点
    岳奡 2005-12-28使用VS2005制作安装包。
    1. 在“新建项目”对话框的左侧树状图中选择“Other Project Types”->“Setup and Deployment”节点,在右侧选择“Web Setup Project”。
     
    2. 在Solution Explorer中在Solution上点右键,选择“Add”->“Existing Web Site”,将存放编译好的Web网站的文件夹加入Solution中。
     
    如果添加使用aspnet_compiler编译好的网站,有可能会出现下面的提示框,点击“是”就行。
     3. 再添加一个新的“Class Library”,名称“CreateDB”,用以创建数据库的操作。
     删除默认生成的“class1.cs”,在这个项目上点右键,选择“Add”->“New Item”,在弹出的对话框中选择“Installer Class”,点击OK。
     
    在类中添加如下代码:
    private void ExecuteSql(string connectionString, string databaseName, string sql)
    {
    SqlConnection sqlConnection = new SqlConnection(connectionString);
    SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);
    try
    {
    sqlCommand.Connection.Open();
    sqlCommand.Connection.ChangeDatabase(databaseName);
    sqlCommand.ExecuteNonQuery();
    }
    catch (Exception exception)
    {
    throw exception;
    }
    finally
    {
    sqlCommand.Connection.Close();
    }
    }public override void Install(System.Collections.IDictionary stateSaver)
    {
    string server = this.Context.Parameters["server"];
    string database = this.Context.Parameters["dbname"];
    string user = this.Context.Parameters["user"];
    string password = this.Context.Parameters["pwd"];
    string targetDir = this.Context.Parameters["targetdir"]; try
    {
    string connectionString = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096",
    server, user, password); //create db
    ExecuteSql(connectionString, "master", "CREATE DATABASE " + database); //set user
    string setUserString = "sp_addlogin 'PrinteryERP', 'PrinteryERP', 'PrinteryERP'";
    string setAccessString = "sp_grantdbaccess 'PrinteryERP'";
    string setRole = "sp_addrolemember 'db_owner', 'PrinteryERP'"; //create new user login
    try
    {
    ExecuteSql(connectionString, "master", setUserString);
    }
    catch { } //set default database
    try
    {
    ExecuteSql(connectionString, "PrinteryERP", setAccessString);
    }
    catch { } //set read role
    try
    {
    ExecuteSql(connectionString, "PrinteryERP", setRole);
    }
    catch { } //create table,store produce......
    Process osqlProcess = new Process();
    osqlProcess.StartInfo.FileName = targetDir + "osql.exe";
    osqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -S {2} -d {3} -i {4}createdb.sql",
    user, password, server, database, targetDir);
    osqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    osqlProcess.Start();
    osqlProcess.WaitForExit();
    osqlProcess.Close(); //add data
    osqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -S {2} -d {3} -i {4}insertdata.sql",
    user, password, server, database, targetDir);
    osqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    osqlProcess.Start();
    osqlProcess.WaitForExit();
    osqlProcess.Close();
    }
    catch (Exception exception)
    {
    throw exception;
    } try
    {
    string configFile = targetDir + "/Web.config";
    if (!File.Exists(configFile))
    {
    throw new InstallException("没有找到配置文件。");
    } XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(configFile); GC.Collect();
    File.Delete(configFile);
    GC.Collect(); foreach (XmlNode xmlNode in xmlDoc["configuration"]["connectionStrings"].ChildNodes)
    {
    if (xmlNode.Name == "add")
    {
    if (xmlNode.Attributes["name"].Value == "DBConnection")
    {
    xmlNode.Attributes["connectionString"].Value = String.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID=PrinteryERP;Password=PrinteryERP",
    server, database);
    }
    if (xmlNode.Attributes["name"].Value == "UserManageServicesConnection")
    {
    xmlNode.Attributes["connectionString"].Value = String.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID=PrinteryERP;Password=PrinteryERP",
    server, database);
    }
    }
    }
    xmlDoc.Save(configFile);
    }
    catch (Exception exception)
    {
    throw exception;
    }
    }
    4. 在“Web Setup Project”项目上点右键,选择“Add”->“Project Output”,选择Project“CreateDB”,选择“Primary Output”,点击OK。重复上述动作,将选择刚才添加的Web Site,选择“Content Files”,点击OK。
       5. 在“Web Setup Project”项目上点右键,选择“Add”->“File”,将创建数据库表、存储过程和视图的脚本createdb.sql加入。重复,将向数据表中添加基础数据的脚本insertdata.sql加入。重复,将程序osql.exe加入。
    6. 在“Web Setup Project”项目上点右键,选择“Add”->“Merge Module”,在弹出的对话框中选择“VC_User_CRT71_RTL_X86_---.msm”,点击OK。添加这个VC运行库是因为在一台干净的机器上测试的时候发现osql.exe这个程序需要这个库。 
    7. 在“Web Setup Project”项目上点右键,选择“Properties”,在弹出的对话框中可以设置一些安装程序的属性。点击按钮“Prerequisites”,在弹出的对话框中选中“.NET Framework 2.0”和“Windows Installer 3.1”,选中“Download prerequisites from the same location as my application”。这样就可以把这些组件和应用程序打包在一起,安装的时候自动检测并安装了。如果需要部署的计算机如果没有打过最新的补丁的话,是没有“Windows Installer 3.1”的,如果没有这个组件,“.NET Framework 2.0”是不能安装的。
       
    8. 在“Web Setup Project”项目上点右键,选择“View”->“Custom Actions”,在出现的树状图的节点“Install”上点右键,选择“Add Custom Actions”。在弹出的对话框中“Look in”中选择“Web Application Folders”,在下面选择“Primary output from CreateDB (Active)”,点击OK。
     9. 在“Web Setup Project”项目上点右键,选择“View”->“User Interface”,在出现的树状图节点“Install”的子节点“Start”上点击右键,选择“Add Dialog”,在弹出的对话框中选择“TextBoxes(A)”。
     
    在新添加的节点“TextBoxes (A)”上点击右键,选择“Properites Window”,依次设置Edit*Property属性为“CUSTOMTEXTA1”,“CUSTOMTEXTA2”,“CUSTOMTEXTA3”和“CUSTOMTEXTA4”。10. 在刚刚建立的“Primary output from CreateDB (Active)”节点上点右键,选择“Properties Window”,设置“CustomActionData”属性为“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"”。接下来对整个解决方案进行编译,会在输出目录下生成两个文件夹和两个文件。
    两个文件夹中分别包含了.NET Framework 2.0和Windows Installer3.1的安装包。另外的两个文件分别是(项目名称).msi和setup.exe。如果要进行安装,请执行setup.exe。
      

  17.   

    to 不是,我的意思是客户机上不能装上SQL Server 我的程序打包后在客户机上装上后就可以像文件一样访问这个备份数据库 这才是我想要的 数据不多的话,用xml文件,数据多的话,用Access来储存。
      

  18.   

    非要用sqlserver数据库文件,可以装MDAC。
      

  19.   

    装了MDAC是不是就可以不装SQLSERver?那么数据库的维护怎么办?
      

  20.   

    真是晕,没有SQL Server/MSDE的话,SQL数据库文件还有用么?
      

  21.   

    提供几种:
    1)access+madc 
    2)msde 2000
    3)sql server 2000(排除)
    4)sql server 2005 express(类似于msde 2000,但是速度慢,效率低)
      

  22.   

    收藏下,呵呵
    以前做项目的时候也打包过SQL,就是通过在程序中执行SQL脚本来实现的
      

  23.   

    msde是不是也可以附加数据库文件???可以的话命令应该怎么写???请大侠们指点
      

  24.   

    附加数据库文件可以了,怎么连???app.config里面这样写为什么一直连接不上呢???<add key="ConnectionString" value="data Source=local\实例名;initial catalog=sq_442rich;integrated security=SSPI"/>   高手们指点啊
      

  25.   

    http://blog.tom.com/blog/read.php?bloggerid=313638&blogid=37540
      

  26.   

    抱歉,写错了,是SQLite,不是me。
    这里有介绍,你可以看看。
    http://www.sqlite.com.cn/POParticle/5/100.Html