using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Common;//需添加microsoft.sqlserver.connectioninfo.dll的引用
using Microsoft.SqlServer.Management;//
using Microsoft.SqlServer.Management.Smo;//在microsoft.sqlserver.smo.dll中
using Microsoft.SqlServer.Management.Smo.RegisteredServers;//Microsoft.SqlServer.SmoExtended
using Microsoft.SqlServer.Management.Smo.Broker;
using Microsoft.SqlServer.Management.Smo.Agent;
using Microsoft.SqlServer.Management.Smo.SqlEnum;
using Microsoft.SqlServer.Management.Smo.Mail;
using Microsoft.SqlServer.Management.Smo.Internal;
using System.IO;
using System.Data.SqlClient;
using System.Text;
using System.Text.RegularExpressions; ////引用位置: C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\ /// <summary>
/// 涂聚文 2017-06-02
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
//Connect to the local, default instance of SQL Server.
Microsoft.SqlServer.Management.Common.ServerConnection conn = new ServerConnection(@"GEOVI-BD87B6B9C\GEOVINDU", "geovindu", "888888");
Server srv = new Server(conn);
//Reference the AdventureWorks2012 database.
Database db = srv.Databases["du"]; //Define a UserDefinedFunction object variable by supplying the parent database and the name arguments in the constructor.
UserDefinedFunction udf = new UserDefinedFunction(db, "IsOWeek"); //Set the TextMode property to false and then set the other properties.
udf.TextMode = false;
udf.DataType = DataType.Int;
udf.ExecutionContext = ExecutionContext.Caller;
udf.FunctionType = UserDefinedFunctionType.Scalar;
udf.ImplementationType = ImplementationType.TransactSql; //Add a parameter. UserDefinedFunctionParameter par = new UserDefinedFunctionParameter(udf, "@DATE", DataType.DateTime);
udf.Parameters.Add(par); //Set the TextBody property to define the user-defined function.
udf.TextBody = "BEGIN DECLARE @ISOweek int SET @ISOweek= DATEPART(wk,@DATE)+1 -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') IF (@ISOweek=0) SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 IF ((DATEPART(mm,@DATE)=12) AND ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) SET @ISOweek=1 RETURN(@ISOweek) END;"; //Create the user-defined function on the instance of SQL Server.
udf.Create(); //Remove the user-defined function.
// udf.Drop();
}
/// <summary>
/// 涂聚文 2017-06-02
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
try
{ //涂聚文 2017-06-02
Microsoft.SqlServer.Management.Common.ServerConnection serverconn = new ServerConnection(@"GEOVI-BD87B6B9C\GEOVINDU", "geovindu", "888888");
string sqlConnectionString = @"Data Source=GEOVI-BD87B6B9C\GEOVINDU;Initial Catalog=Du;User ID=Geovin Du;Password=888888";
//1.有报错问题
//FileInfo file = new FileInfo("fu.sql");
//string script = file.OpenText().ReadToEnd();
//script = script.Replace("\t", " ").Replace("\n", " ");
//SqlConnection conn = new SqlConnection(sqlConnectionString);
//Server server = new Server(serverconn);//new ServerConnection(conn)
//Database db = server.Databases["du"];
//server.ConnectionContext.ExecuteNonQuery(script);//出问题 SqlConnection conn = new SqlConnection(sqlConnectionString);
conn.Open();
string script = File.ReadAllText("fu.sql"); // split script on GO command
IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
foreach (string commandString in commandStrings)
{
if (commandString.Trim() != "")
{
new SqlCommand(commandString, conn).ExecuteNonQuery();
}
}
MessageBox.Show("Database updated successfully."); }
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
} /// <summary>
/// Run an .sql script trough sqlcmd.
/// </summary>
/// <param name="fileName">the .sql script</param>
/// <param name="machineName">The name of the server.</param>
/// <param name="databaseName">The name of the database to connect to.</param>
/// <param name="trustedConnection">Use a trusted connection.</param>
/// <param name="args">The arguments passed to the sql script.</param>
public void RunSqlScript(string fileName, string machineName, string databaseName, bool trustedConnection, string[] args)
{
// simple checks
if (!Path.GetExtension(fileName).Equals(".sql", StringComparison.InvariantCulture))
throw new Exception("The file doesn't end with .sql."); // check for used arguments
foreach (var shortArg in new[] { "S", "d", "E", "i" })
{
var tmpArg = args.SingleOrDefault(a => a.StartsWith(string.Format("-{0}", shortArg), StringComparison.InvariantCulture));
if (tmpArg != null)
throw new ArgumentException(string.Format("Cannot pass -{0} argument to sqlcmd for a second time.", shortArg));
} // check the params for trusted connection.
var userArg = args.SingleOrDefault(a => a.StartsWith("-U", StringComparison.InvariantCulture));
var passwordArg = args.SingleOrDefault(a => a.StartsWith("-P", StringComparison.InvariantCulture));
if (trustedConnection)
{
if (userArg != null)
throw new ArgumentException("Cannot pass -H argument when trustedConnection is used.");
if (passwordArg != null)
throw new ArgumentException("Cannot pass -P argument when trustedConnection is used.");
}
else
{
if (userArg == null)
throw new ArgumentException("Exspecting username(-H) argument when trustedConnection is not used.");
if (passwordArg == null)
throw new ArgumentException("Exspecting password(-P) argument when trustedConnection is not used.");
} // set the working directory. (can be needed with ouputfile)
// TODO: Test if the above statement is correct
var tmpDirectory = Directory.GetCurrentDirectory();
var directory = Path.IsPathRooted(fileName) ? Path.GetDirectoryName(fileName) : Path.Combine(fileName);//this.ProjectRoot
var file = Path.GetFileName(fileName);
Directory.SetCurrentDirectory(directory); // create cmd line
var cmd = string.Format(string.Format("SQLCMD -S {0} -d {1} -i \"{2}\"", machineName, databaseName, file));
foreach (var argument in args.Where(a => a.StartsWith("-", StringComparison.InvariantCultureIgnoreCase)))
cmd += " " + argument;
if (trustedConnection)
cmd += " -E"; // create the process
var process = new System.Diagnostics.Process();
process.StartInfo.FileName = "cmd";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true; // start the application
process.Start();
process.StandardInput.WriteLine("@ECHO OFF");
process.StandardInput.WriteLine(string.Format("cd {0}", directory));
process.StandardInput.WriteLine(cmd);
process.StandardInput.WriteLine("EXIT");
process.StandardInput.Flush();
process.WaitForExit(); // write the output to my debug folder and restore the current directory
// Debug.Write(process.StandardOutput.ReadToEnd());
Directory.SetCurrentDirectory(tmpDirectory);
} // public void Restore(OdbcConnection sqlcon, string DatabaseFullPath, string backUpPath)
// {
// using (sqlcon)
// {
// string UseMaster = "USE master";
// OdbcCommand UseMasterCommand = new OdbcCommand(UseMaster, sqlcon);
// UseMasterCommand.ExecuteNonQuery();
// // The below query will rollback any transaction which is running on that database and brings SQL Server database in a single user mode.
// string Alter1 = @"ALTER DATABASE
// [" + DatabaseFullPath + "] SET Single_User WITH Rollback Immediate";
// OdbcCommand Alter1Cmd = new OdbcCommand(Alter1, sqlcon);
// Alter1Cmd.ExecuteNonQuery();
// // The below query will restore database file from disk where backup was taken ....
// string Restore = @"RESTORE DATABASE
// [" + DatabaseFullPath + "] FROM DISK = N'" +
// backUpPath + @"' WITH FILE = 1, NOUNLOAD, STATS = 10";
// OdbcCommand RestoreCmd = new OdbcCommand(Restore, sqlcon);
// RestoreCmd.ExecuteNonQuery();
// // the below query change the database back to multiuser
// string Alter2 = @"ALTER DATABASE
// [" + DatabaseFullPath + "] SET Multi_User";
// OdbcCommand Alter2Cmd = new OdbcCommand(Alter2, sqlcon);
// Alter2Cmd.ExecuteNonQuery();
// Cursor.Current = Cursors.Default;
// }
// }

  https://www.codeproject.com/Tips/873677/SQL-Server-Database-Backup-and-Restore-in-Csharp

https://www.codeproject.com/Articles/162684/SMO-Tutorial-of-n-Scripting

https://www.codeproject.com/articles/31826/sql-server-authentication-using-smo

https://stackoverflow.com/questions/650098/how-to-execute-an-sql-script-file-using-c-sharp

https://social.msdn.microsoft.com/Forums/en-US/43e8bc3a-1132-453b-b950-09427e970f31/run-a-sql-script-file-in-c?forum=adodotnetdataproviders

VS 2010 报错:

+ $exception {"混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。":null} System.Exception {System.IO.FileLoadException}

App.config 配置:

1.一种方式

<startup  useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>

2.二种方式

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

  

 

csharp:SMO run sql script的更多相关文章

  1. How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?

    In this Document   Goal   Solution   1: How do you enable trace for an API when executed from a SQL ...

  2. 可重复执行的SQL Script

    问题 在工作中偶尔会遇到这样的问题:SQL script重复执行时会报错. 理想的状态下,SQL script跑一遍就够了,是不会重复执行的,但是实际情况往往很复杂. 比如Dev同学在开发时在A环境把 ...

  3. MySQL5.7: sql script demo

    -- MyISAM Foreign Keys显示不了外键,MyISAM此为5.0 以下版本使用 InnoDB 为5.0以上版本使用 drop table IF EXISTS city; CREATE ...

  4. SQLite: sql script demo

    如果有成熟的架构,如何根据数据库关系的表.视图等,进行代码生成架构?减少写代码的时间? -- 考虑主键外键 -- create database geovindu; use geovindu; --2 ...

  5. How to import .sql script

    How to import .sql script 1.Export .sql from pl/sql developer you can reference to other document in ...

  6. npm link & run npm script

    npm link & run npm script https://blog.csdn.net/juhaotian/article/details/78672390 npm link命令可以将 ...

  7. Run bash script as daemon

    linux - Run bash script as daemon - Stack Overflow https://stackoverflow.com/questions/19233529/run- ...

  8. The fileSyncDll.ps1 is not digitally signed. You cannot run this script on the current system.

    https://www.opentechguides.com/how-to/article/powershell/105/powershel-security-error.html Unblockin ...

  9. doris: shell invoke .sql script for doris and passing values for parameters in sql script.

    1. background in most cases, we want to execute sql script  in doris  routinely. using azkaban, to l ...

随机推荐

  1. 改善Python 程序的 91 个建议

    建议1.理解Pythonic概念—-详见Python中的<Python之禅> 建议2.编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕过长 ...

  2. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  3. 开源性能测试工具Locust使用篇(三)

    脚本增强 面对较复杂的测试场景,我们可能还是会感觉无从下手:例如,很多时候脚本需要做关联或参数化处理,Locust中就不知道怎么实现了.可能也是这方面的原因,感觉难以将Locust应用到实际的性能测试 ...

  4. 《机器学习实战(基于scikit-learn和TensorFlow)》第四章内容的学习心得

    本章主要讲训练模型的方法. 线性回归模型 闭式方程:直接计算最适合训练集的模型参数 梯度下降:逐渐调整模型参数直到训练集上的成本函数调至最低,最终趋同与第一种方法计算出的参数 首先,给出线性回归模型的 ...

  5. shell 脚本中的当前工作目录等于执行脚本时所在的工作目录

    1. 测试脚本 在当前目录下创建 h1 h2两个文件夹 2. 在脚本所在目录执行脚本 在当前目录下创建了h1 h2两个目录 3. 在其他目录爱=下执行脚本 在其他目录下执行脚本时,在执行脚本所在的目录 ...

  6. python中基于queue的打印机仿真算法

    使用打印机的模型是queue中最经典的应用之一,这里就回顾一下queue在这里的使用方法和 起的重要作用. 为了仿真打印状态,这里需要把真实环境中的三个物理模型要建模出来,分别是:打印者,打印 任务, ...

  7. setting-mirrorO以及下载jar包流程简介

    mirrorOf常见的几种配置如下 1.* 2.repo3 3.repo1,repo2,*,!repo3 4.external:* 第二个例子只配置了一个repo3,这个镜像只能匹配id是repo3的 ...

  8. VSCode配置Git随记

    VSCode配置Git随记 2018年05月29日 10:14:24 Dominic- 阅读数:4096   vscode中对git进行了集成,很多操作只需点击就能操作,无需写一些git指令. 不过这 ...

  9. web自动化测试---web页面元素的定位

    selenium提供了很多用于定位元素的方法,首先我们自己需要知道元素有哪些属性,这就需要用到安装测试环境中firebug来定位 打开firefox浏览器,按下F12键,我们就可以看到如下图所示的界面 ...

  10. Django--自定义 Command 命令

    Django 对于命令的添加有一套规范,你可以为每个app 指定命令.通俗一点讲,比如在使用manage.py文件执行命令的时候,可以自定制自己的命令,来实现命令的扩充. commands的创建 1. ...