用SqlCommand "EXEC master..xp_cmdshell 'osql -SYourServerName -UYourLoginName -PYourPassword -ic:\MySQl.sql -n'"

解决方案 »

  1.   

    把MSSQL的路径打开使用 osql 实用工具运行 Instnwnd.sql 脚本: 
    Process.Start("osql/Usa /Psapassword /Sservername /iinstnwnd.sql /oinstnwnd.rpt")检查 Instnwnd.rpt 中报告的错误。
      

  2.   

    重点介绍如何在安装包中自动为客户创建数据库 步骤: 
    1、添加一个新项目->选择类库模板->命名为DBCustomAction 
    2、单击项目右键->添加新项->选择安装程序类(命名为DBCustomAction.cs) 
    3、在服务器资源管理器中添加->连接到数据库->指定用户密码(选择允许保存密码)->数据库选择master 
    4、切换到DBCustomAction.cs的视图状态->将服务器资源管理器数据库连接中的master.dbo拖动到designer中 
    5、添加一个新项sql.txt(注意要使用小写),输入下列sql代码 
    CREATE TABLE [dbo].[MK_Employees] ( 
    [Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , 
    [Rsvp] [int] NULL , 
    [Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL  
    ) ON [PRIMARY]; ALTER TABLE [dbo].[MK_Employees] WITH NOCHECK ADD  
    CONSTRAINT [PK_MK_Employees] PRIMARY KEY CLUSTERED  

    [Name] 
    ) ON [PRIMARY]; 
    (P.S:也可以直接用SqlServer导出) 6、在sql.txt的右键属性中->生成操作->嵌入的资源 
    7、将DBCustomAction.cs切换到代码视图,添加下列代码 
    private  string GetSql(string Name) 
          { 
             try 
             { 
                Assembly Asm = Assembly.GetExecutingAssembly(); 
                Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "."+Name); 
                StreamReader reader = new StreamReader(strm); 
                return reader.ReadToEnd(); 
             } 
             catch (Exception ex) 
             { 
                Console.Write("In GetSql:"+ex.Message); 
                throw ex; 
             } 
          }       private void ExecuteSql(string DataBaseName,string Sql) 
          { 
             System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);          Command.Connection.Open(); 
             Command.Connection.ChangeDatabase(DataBaseName); 
             try 
             { 
                Command.ExecuteNonQuery(); 
             } 
             finally 
             { 
                Command.Connection.Close(); 
             } 
          } 
          protected void AddDBTable(string strDBName) 
          { 
             try 
             { 
                ExecuteSql("master","CREATE DATABASE "+ strDBName); 
                ExecuteSql(strDBName,GetSql("sql.txt")); 
             } 
             catch(Exception ex) 
             { 
                   Console.Write("In exception handler :"+ex.Message); 
             } 
          }       public override void Install(System.Collections.IDictionary stateSaver) 
          { 
              base.Install(stateSaver); 
                 AddDBTable(this.Context.Parameters["dbname"]); 
          } 
    8、再添加一个新项目,(选择添加到解决方案中)->项目类型为安装项目->命名为DBCustomAction Installer 
    9、选择应用程序文件夹->添加->项目输出->主输出 
    10、在方案资源管理器中->右键安装项目(DBCustomAction Installer)->视图->用户界面 
    11、选中启动结点->添加对话框->文本A 
    12、选动文本框A->右键->上移一直到最顶端 
    13、选择文本框A属性->修改BannerText,(Specify Database Name) 
    14、修改BodyText(This dialog allows you to specify the name of the database to be created on the database server. ) 
    15、修改EditLabel1(Name of DB),修改Edit1Porperty(CUSTOMTEXTA1),将其他Edit2,3,4的Edit(2,3,4)Visible属性设为false; 
    16、在方案资源管理器中->右键安装项目(DBCustomAction Installer)->视图->自定义操作 
    17、选中安装结点->添加->双击应用程序文件夹->主输出来自DBCustomAction(活动)->右键属性->CustomActiveData属性修改为/dbname=[CUSTOMTEXTA1] 
    18、编译生成,OK! 注:此文章主要来自于MSDN,本来代码使用vb.net,我用C#改写了一下,完整URL请参考 
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxwlkWalkthroughUsingCustomActionToCreateDatabaseDuringInstallation.asp 
    另外没有接受客户数据库服务Server-Name和Password的对话框,我想既然可以接受DBNAME参数,那么接收Server-Name和Password应该也不难. 
    几张图片 
      

  3.   

    按如下实现using System;
    using System.Data;
    using System.Collections;
    using System.Xml;
    using System.IO;
    using System.Text;
    using System.Diagnostics;namespace ZZ
    {

    public class ZZConsole
    {
    [STAThread]
    static void Main(string[] args)
    {
    //测试
    //string vv = ExeCommand("dir");
    //Console.WriteLine(vv);
    string sqlQuery = "osql.exe /uSa /p123 /s192.192.132.229 /dNorthWind /i yoursql.sql";
    string strRst = ExeCommand(sqlQuery);
    Console.WriteLine(strRst);
    Console.ReadLine();
    }
    /// <summary>
    /// 执行单条命令
    /// </summary>
    /// <param name="commandText">命令文本</param>
    /// <returns>命令输出文本</returns>
    public static string ExeCommand(string commandText)
    {
    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.CreateNoWindow = true;
    string strOutput = null;
    try
    {
    p.Start();
    p.StandardInput.WriteLine(commandText);
    p.StandardInput.WriteLine("exit");
    strOutput = p.StandardOutput.ReadToEnd();
    p.WaitForExit();
    p.Close();
    }
    catch(Exception e)
    {
    strOutput = e.Message;
    }
    return strOutput;
    }
    }
    }
    =====================
    使用osql执行Sql语句。用法: osql              [-U login id]          [-P password]
      [-S server]            [-H hostname]          [-E trusted connection]
      [-d use database name] [-l login timeout]     [-t query timeout]
      [-h headers]           [-s colseparator]      [-w columnwidth]
      [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
      [-L list servers]      [-c cmdend]            [-D ODBC DSN name]
      [-q "cmdline query"]   [-Q "cmdline query" and exit]
      [-n remove numbering]  [-m errorlevel]
      [-r msgs to stderr]    [-V severitylevel]
      [-i inputfile]         [-o outputfile]
      [-p print statistics]  [-b On error batch abort]
      [-X[1] disable commands [and exit with warning]]
      [-O use Old ISQL behavior disables the following]
      [-? show syntax summary]
    具体参考  
    http://www.588188.com/netbook/sqlserver2000/coprompt/cp_osql_1wxl.htm
    例如:
    osql.exe /uSa /p123 /s192.192.132.229 /dNorthWind /i yoursql.sql