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 ...
随机推荐
- VS工具栏没有出现可用工具的情况
(1)没有切换到资源视图,打开具体的对话框. (2)如果你在调试状态,即使打开了具体的对话框,VS工具箱还是不会出现可用的控件的.所以不要在调试状态下添加控件.
- MLlib之NaiveBayes算法源码学习
package org.apache.spark.mllib.classification import breeze.linalg.{DenseMatrix => BDM, DenseVect ...
- redis-cluster无备节点,安装脚本
#!/bin/bash #安装gcc yum -y install gcc #安装RVM所需的程序包 yum -y install gcc-c++ patch readline readline-de ...
- 【Android】为需要支持API 11之前的Activity添加Action Bar的一种解决方案
首先汗一个,题目打出来我就觉得像是在写论文…… 家里生了个娃,好久没有写东西了…… 做Android开发有一个很头疼的地方就是随着sdk的演进,很多新东西被加进来.但由于这样那样的限制, 不是所有的新 ...
- Re:从零开始的MySQL入门学习
Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器.由于这四个软件都是免费或开放式源码软件,因此使用这种不用花一分钱(人工成本除外)就可以建立起一 ...
- Unity3D鼠标坐标转世界坐标和局部坐标
鼠标坐标转世界坐标和局部坐标: Vector3 MousePosition2Local () { mousePosition = Input.mousePosition; //获取屏幕坐标 mouse ...
- SQL 必知必会·笔记<8>分组数据
1. 使用GROUP BY子句创建分组 示例: SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id; 注意 GRO ...
- 使用InstallUtil发布windows服务
发布Windows Service的方法 1. 在默认窗口Service1中右键Add Install,自动生成两个类. 2. 修改serviceInstaller1的属性: a)ServiceNa ...
- 记录一个简单的dbcp数据连接池
这个示例用到了ThreadLocal与dbcp,我觉得有点意思,就整理了下.使用dbcp,肯定要导入commons-dbcp.jar包.下面直接贴DBUtil代码: public class DBUt ...
- AIOps 在腾讯的探索和实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由LemonLu发表于云+社区专栏 赵建春 腾讯 技术运营通道主席 腾讯 社交网络运营部助理总经理 AIOps 白皮书核心编写专家 我今 ...