Main(string[] args)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using System.IO;

namespace ScriptSqlDatabase
{
class Program
{
private const string L_DOT_SQL = ".sql";

static void Main(string[] args)
{
string server = null;
string database = null;
string username = null;
string password = null;
string filename = null;

if (args.Length == 0)
{
Console.WriteLine(@"Options:
/s:server Required. For example: server\instance
/d:database Required.
/f:outpufile Optional. If not specified, will be set to {database}.sql.
/u:username Optional. If not specified, will use Windows authentication.
/p:password Optional.");
return;
}

foreach (string arg in args)
{
if (arg.StartsWith("/s:", StringComparison.CurrentCultureIgnoreCase))
{
server = arg.Substring(3);
}
else if (arg.StartsWith("/d:", StringComparison.CurrentCultureIgnoreCase))
{
database = arg.Substring(3);
}
else if (arg.StartsWith("/u:", StringComparison.CurrentCultureIgnoreCase))
{
username = arg.Substring(3);
}
else if (arg.StartsWith("/p:", StringComparison.CurrentCultureIgnoreCase))
{
password = arg.Substring(3);
}
else if (arg.StartsWith("/f:", StringComparison.CurrentCultureIgnoreCase)
|| string.Compare(arg, "/f", StringComparison.CurrentCultureIgnoreCase) == 0)
{
filename = arg.Substring(3);
}
else
{
Console.WriteLine("Ignoring invalid command line argument: {0}", arg);
}
}
if (server == null || database == null)
{
Console.WriteLine("No server or database specified, cannot continue.");
return;
}

if (string.IsNullOrEmpty(filename)) filename = database + L_DOT_SQL;
else
{
if (!filename.EndsWith(L_DOT_SQL, StringComparison.InvariantCultureIgnoreCase))
{
filename += L_DOT_SQL;
}
}
var startTime = DateTime.Now;

var c = new ServerConnection(server);
if (username != null)
{
c.LoginSecure = false;
c.Login = username;
c.Password = password;
}
else
c.LoginSecure = true;

Server smoServer;
Database db = null;
try
{
smoServer = new Server(c);
db = smoServer.Databases[database];
}
catch (Exception ex)
{
Console.WriteLine("Unable to connect to server {0}", server);
Console.WriteLine(ex.ToString());
return;
}

var scriptingOptions = new ScriptingOptions();
scriptingOptions.TargetServerVersion = SqlServerVersion.Version105;
scriptingOptions.IncludeDatabaseContext = true;
scriptingOptions.IncludeHeaders = true;
//scriptingOptions.IncludeIfNotExists = true;
scriptingOptions.AllowSystemObjects = false;
scriptingOptions.NoCollation = true;
scriptingOptions.Indexes = true;
scriptingOptions.Triggers = true;
scriptingOptions.DriAll = true;
scriptingOptions.ExtendedProperties = true;
scriptingOptions.AppendToFile = true;
scriptingOptions.ToFileOnly = true;
scriptingOptions.FileName = filename;
scriptingOptions.Encoding = Encoding.UTF8;

var targetVersionString = "(Unknown)";
switch(scriptingOptions.TargetServerVersion)
{
case SqlServerVersion.Version80:
targetVersionString = "SQL SERVER 2000";
break;
case SqlServerVersion.Version90:
targetVersionString = "SQL SERVER 2005";
break;
case SqlServerVersion.Version100:
targetVersionString = "SQL SERVER 2008";
break;
case SqlServerVersion.Version105:
targetVersionString = "SQL SERVER 2008 R2";
break;
}
var fmt = @"-- AUTO-GENERATED BY TOOL ScriptSqlDatabase on {0}
-- Target server version: {1}
-- File encoding: {2}

";
var s = string.Format(fmt, DateTime.Now, targetVersionString, scriptingOptions.Encoding.WebName);
File.WriteAllText(filename, s, scriptingOptions.Encoding);

try
{
Console.WriteLine("Scripting database");
db.Script(scriptingOptions);

var transfer = new Transfer(db);
transfer.Options = scriptingOptions;
transfer.CopySchema = true;
transfer.CopyAllObjects = true;
transfer.DestinationDatabase = database;
transfer.ScriptingProgress += (sender, e) =>
{
try
{
var pattern = string.Format(@"/{0}\[@Name=‘(.+?)‘ and @Schema=‘(.+?)‘\]", e.Current.Type);
var re = new Regex(pattern, RegexOptions.IgnoreCase);
//Console.WriteLine("{0}", e.Current.Value);
var match = re.Match(e.Current.Value);
if (match.Success)
{
Console.WriteLine("{0}/{1}: {3}.{2}", e.TotalCount, e.Total,
match.Groups[1].Value, match.Groups[2].Value);
}
}
catch (Exception ex)
{
Console.WriteLine("{0}: {0}", ex.GetType(), ex.ToString());
}
};
transfer.ScriptTransfer();
}
catch (Exception ex)
{
Console.WriteLine("{0}: {0}", ex.GetType(), ex.ToString());
return;
}

var endTime = DateTime.Now;
Console.WriteLine("Done! Time elapsed: {0}", endTime - startTime);
}

/*
private static void dumpScripts(System.Collections.Specialized.StringCollection x)
{
foreach (var s in x)
{
Console.WriteLine(s);
}
}*/

}
}

Main(string[] args),布布扣,bubuko.com

时间: 2024-10-06 09:08:50

Main(string[] args)的相关文章

关于Console的Main(String[] args)参数输入

之前接触一个往Console里输入参数的项目,资深QA教我怎么run,灰常脸红. 今日无事,baidu之. Step1 写简单Console Code. 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int i = 0; 6 if (args.Length < 1) 7 Console.WriteLine("No args"); 8 else 9 foreach (string s in args) 10

public static void main(String[] args){}函数诠释

主函数的一般写法如下: public static void main(String[] args){-} 下面分别解释这些关键字的作用: (1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数. (2)static关键字,告知编译器main函数是一个静态函数.也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就 已经存在了.如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示ma

C#中static void Main(string[ ] args)中的作用及解释

C#中static void Main(string[ ] args)中的作用及解释 static 表示方法是静态的就是说方法在程序被编译的时候就被分配了内存,使用的时候不用生成某个类型的对象,知道程序退出才释放. void 表示方法没有返回值,就是方法没有renturn 关键字. main 是方法名,当然这个方法是特殊的方法,是Main()就是说是主函数,就是整个程序的入口,程序被编译后从这里开始执行,这也是main方法要是static的原因,因为在啥都没做的时候这个函数就得存在. strin

C#中static void Main(string[] args)的含义

C#中static void Main(string[] args)的含义 static:是将main方法声明为静态的. void:说明main方法不会返回任何内容. String[]args:这是用来接收命令行传入的参数,String[]是声明args是可以存储字符串数组. 运行时会弹出命令窗口,你可以在那里输入一些参数,string[] args 指的就是你在命令窗口输入的参数. 也就是命令行参数. args是用来处理命令行参数的.命令行参数,就是你运行这个程序的时候给它传的参数.它是可选项

《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法

public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法.其中,public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明main方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问,JVM在启动的时候就是按照上述方法的签名(必须有public与static修饰,返回值为void,且方

关于C#的Main(String[] args)参数输入问题

关于C#的Main(String[] args)参数输入问题 指定相关的测试代码 首先,写一个用于测试的关于Main(String[] args)参数输入有关的代码类,如下: using System; public class Hello{    public static void Main(String[] args)    {        switch (args[0])        {            case "老板":                Consol

将 main 方法定义为:public static void main(String[] args)的理由

1.没有public修饰符或者其他修饰符 错误: 在类...中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application 2.没有static 错误: main 方法不是类 ... 中的static, 请将 main 方法定义为: public static void main(String[] args) 3.返回值不是v

关于public static void main(String[] args)相关知识

main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同.比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等. 这个main()方法的声明为:public static void main(String args[]).必须这么定义,这是Java的规范.为什么要这么定义,和JVM的运行有关系. 1)解释main:当一个类中有main()方

public static void main(String[] args)说明

/*public static void main(String[] args) 主函数特殊之处:1,格式是固定的.2,被jvm所识别和调用. public:因为权限必须是最大的.static:不需要对象的,直接用主函数所属类名调用即可.void:主函数没有具体的返回值.main:函数名,不是关键字,只是一个jvm识别的固定的名字.String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型. */ class MainDemo { public static