csharp:SMO run sql script
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的更多相关文章
- 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 ...
- 可重复执行的SQL Script
问题 在工作中偶尔会遇到这样的问题:SQL script重复执行时会报错. 理想的状态下,SQL script跑一遍就够了,是不会重复执行的,但是实际情况往往很复杂. 比如Dev同学在开发时在A环境把 ...
- MySQL5.7: sql script demo
-- MyISAM Foreign Keys显示不了外键,MyISAM此为5.0 以下版本使用 InnoDB 为5.0以上版本使用 drop table IF EXISTS city; CREATE ...
- SQLite: sql script demo
如果有成熟的架构,如何根据数据库关系的表.视图等,进行代码生成架构?减少写代码的时间? -- 考虑主键外键 -- create database geovindu; use geovindu; --2 ...
- How to import .sql script
How to import .sql script 1.Export .sql from pl/sql developer you can reference to other document in ...
- npm link & run npm script
npm link & run npm script https://blog.csdn.net/juhaotian/article/details/78672390 npm link命令可以将 ...
- Run bash script as daemon
linux - Run bash script as daemon - Stack Overflow https://stackoverflow.com/questions/19233529/run- ...
- 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 ...
- 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 ...
随机推荐
- 一次对SNMP服务的渗透测试
Hacking SNMP Service - The Post Exploitation :Attacking Network - Network Pentesting原文地址:http://www. ...
- java相关技术问答(一)
网上一些没有标准答案的面试题,我自己做的解答总结,有任何异议可以提出来~^_^,不断更新中... Springboot除了自动配置与传统的spring还有哪些不同 传统的springweb项目需要部署 ...
- opus在arm的嵌入式平台上的移植和开发
最近产品中要用到opus,圣上一声令下,把opus移植到我们平台上,什么?opus?opus是什么?在一脸 茫然中,我这特种兵码农就赤手空拳上战场了. 废话少说,赶紧在网站:https://opus- ...
- Python函数——闭包延迟绑定
前言 请看下面代码 def multipliers(): return [lambda x : i*x for i in range(4)] print ([m(2) for m in multipl ...
- LDA-线性判别分析(一)预备知识
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- php 对数组按照字符串长度排序
$file = file('zong.txt'); usort($file, 'sortByLen'); $handle = fopen('zong2.txt', 'a'); foreach ($fi ...
- kafka+elk
安装elasticsearch 下载:http://www.elastic.co/downloads/elasticsearch 下载后解压 修改配置文件,xxx是自定义目录 vi elasticse ...
- 今天讲座的感悟--java
发现当你擅长于某一专业,永远那专业上的人才挤挤.倘若你和相邻专业结合,就能更厉害的走在交叉专业上.例如:医学加计算机等 待续...
- 深入理解String, StringBuffer, StringBuilder的区别(基于JDK1.8)
String.StringBuffer.StringBuilder都是JAVA中常用的字符串操作类,对于他们的区别大家也都能耳熟能详,但底层到底是怎样实现的呢?今天就再深入分析下这三种字符串操作的区别 ...
- 关系型数据库 VS NOSQL
转载:https://mp.weixin.qq.com/s/FkoOMY8_vnqSPPTHc2PL1w 行式数据库(关系型数据库) 行式数据库有如下几个缺点: 大数据场景下 I/O 较高,因为数据是 ...