亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

C#執行SQL腳本文件

2024-07-21 02:53:18
字體:
來源:轉載
供稿:網友

方法一:osql.exe(這種方式最簡單,但貌似微軟以后會取消這個功能,改為SqlCmd了)

最簡單的方法就是調用 osql.exe .

具體方法如下(以sql server200 數據庫為例):

            try            {                System.Diagnostics.PRocess pr = new System.Diagnostics.Process();                pr.StartInfo.FileName = "osql.exe ";                pr.StartInfo.Arguments = "-U sa -P sa -d master -s 127.0.0.1 -i Sql.sql";                pr.StartInfo.UseShellExecute = false;                pr.StartInfo.RedirectStandardOutput = true;  //重定向輸出                             pr.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//隱藏輸出窗口                pr.Start();                                System.IO.StreamReader sr = pr.StandardOutput;                Console.WriteLine(sr.ReadToEnd());                   pr.WaitForExit();                pr.Close();            }            catch(Exception err)            {                MessageBox.Show(err.ToString());            }

以下是osql的一些參數用法:

用法: osql                   [-U 登錄 ID]          [-P 密碼]  [-S 服務器]                [-H 主機名]           [-E 可信連接]  [-d 使用數據庫名稱]        [-l 登錄超時值]       [-t 查詢超時值]  [-h 標題]                  [-s 列分隔符]         [-w 列寬]  [-a 數據包大小]            [-e 回顯輸入]         [-I 允許帶引號的標識符]  [-L 列出服務器]            [-c 命令結束]         [-D ODBC DSN 名稱]  [-q "命令行查詢"]          [-Q "命令行查詢" 并退出]  [-n 刪除編號方式]          [-m 錯誤級別]  [-r 發送到 stderr 的消息]  [-V 嚴重級別]  [-i 輸入文件]              [-o 輸出文件]  [-p 打印統計信息]               [-b 出錯時中止批處理]  [-X[1] 禁用命令,[退出的同時顯示警告]]  [-O 使用舊 ISQL 行為禁用下列項]

 

------------------------------------------------------------------------------------------------------------------------------------------------

private void execfile(){try{string connStr = "data source={0};user id={1};passWord={2};persist security info=false;packet size=4096";ExecuteSql(connStr, "master", "CREATE DATABASE " + "數據庫名"); //這個數據庫名是指你要新建的數據庫名稱 下同System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();sqlProcess.StartInfo.FileName = "osql.exe ";sqlProcess.StartInfo.Arguments = " -U 數據庫用戶名 -P 密碼 -d 數據庫名 -i 存放sql文本的目錄sql.sql";sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;sqlProcess.Start();sqlProcess.WaitForExit();sqlProcess.Close();}catch (Exception ex){throw ex;}}private void ExecuteSql(string conn, string DatabaseName, string Sql){System.Data.SqlClient.SqlConnection MySQLConnection = new System.Data.SqlClient.SqlConnection(conn);System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql, mySqlConnection);Command.Connection.Open();Command.Connection.ChangeDatabase(DatabaseName);try{Command.ExecuteNonQuery();}finally{Command.Connection.Close();}}

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ventry/archive/2006/03/02/613981.aspx

try{System.Diagnostics.Process pr = new System.Diagnostics.Process();pr.StartInfo.FileName = "osql.exe ";pr.StartInfo.Arguments = "-U sa -P lmj -d testdata -s 127.0.0.1 -i script.sql";pr.StartInfo.UseShellExecute = false;pr.StartInfo.RedirectStandardOutput = true; //重定向輸出

pr.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//隱藏輸出窗口pr.Start();

System.IO.StreamReader sr = pr.StandardOutput;Console.WriteLine(sr.ReadToEnd());

pr.WaitForExit();pr.Close();}catch (Exception err){//MessageBox.Show(err.ToString());}

asp.net(C#)執行.SQL腳本實現數據庫建表

using System;using System.Data;using System.Data.SqlClient;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO; //輸入輸出流命名空間

public class Lj{public static ArrayList ExecuteSqlFile(string varFileName){//// TODO:讀取.sql腳本文件//StreamReader sr = File.OpenText(varFileName);//傳入的是文件路徑及完整的文件名ArrayList alSql = new ArrayList(); //每讀取一條語名存入ArrayListstring commandText = "";string varLine = "";while (sr.Peek() > -1){varLine = sr.ReadLine();if (varLine == ""){continue;}if (varLine != "GO"){commandText += varLine;commandText += " ";}else{alSql.Add(commandText);commandText = "";}}

sr.Close();return alSql;}}public partial class baidu : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){

string constr = "data source=.;uid=sa;pwd=;database=lx"; // 定義鏈接字符竄SqlConnection conn = new SqlConnection(constr);conn.Open(); SqlCommand cmd = new SqlCommand();cmd.Connection = conn;ArrayList Lists = Lj.ExecuteSqlFile(Server.MapPath("NetShop.sql")); //調用ExecuteSqlFile()方法,反回 ArrayList對象;string teststr; //定義遍歷ArrayList 的變量;foreach (string varcommandText in Lists){teststr = varcommandText; //遍歷并符值;//Response.Write(teststr + "|@|<br>");cmd.CommandText = teststr; //為SqlCommand賦Sql語句;cmd.ExecuteNonQuery(); //執行}conn.Close();}}

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/FuCity/archive/2008/05/20/2462295.aspx

有用的using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.xml.Linq;

public partial class _Default : System.Web.UI.Page{//protected void Page_Load(object sender, EventArgs e)//{// execfile();//}//private void execfile()//{// //try// //{// // string connStr = "data source={0};user id={1};password={2};persist security info=false;packet size=4096";// // ExecuteSql(connStr, "master", "CREATE DATABASE " + "testdata"); //這個數據庫名是指你要新建的數據庫名稱 下同// // System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();// // sqlProcess.StartInfo.FileName = "osql.exe ";// // sqlProcess.StartInfo.Arguments = " -U sa -P lmj -d testdata -i script.sql";// // sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;// // sqlProcess.Start();// // sqlProcess.WaitForExit();// // sqlProcess.Close();// //}// //catch (Exception ex)// //{// // throw ex;// //}/

 

-----------------------------------------------------------------------------------------------------------------------------------------------

方法二:

讓C#程序直接執行sql腳本文件,類似SSMS直接打開sql文件并執行一樣,搜索了一下結果還真有,不過需要借用mssql的幾個類庫及命名空間:

Microsoft.SqlServer.ConnectionInfo.dll

Microsoft.SqlServer.Smo.dll

--------------------------------------------

using Microsoft.SqlServer.Management.Common;

using Microsoft.SqlServer.Management.Smo;

 

這里有一個小插敘,對于vs2008里可以直接引用這個這兩個類庫,但在vs2010里的引用就無法找到這兩個類庫了(不知道微軟是怎么考慮的)

還好我電腦vs2008和vs2010都安裝了

不過我還是避易就難的講一下,vs2010在引用里無法找到這兩個類庫,那我們就想辦法找到它,首先我電腦安裝了mssqlserver2008 ,

我去X:/Program Files/Microsoft SQL Server/100/SDK/Assemblies 找到

Microsoft.SqlServer.ConnectionInfo.dll

Microsoft.SqlServer.Smo.dll

Microsoft.SqlServer.Management.Sdk.Sfc.dll(這個一定要考到你的程序目錄,但你可以不引用)

然后手動添加應用,第三個dll一定要引用,不然會報錯

 

代碼如下:

復制代碼
//補卡操作         private void PatchCard()         {             string path = System.Environment.CurrentDirectory;             string CardNo = txtCardNo.Text.Trim();             string connectonstring=ConfigurationManager.AppSettings["connectionString"].ToString();             if(CardNo==null||CardNo=="")             {                 MessageBox.Show("卡號不能為空!");                 return;             }             if(!path.EndsWith(@"/"))             {                 path += @"/";             }             path+="補藍鯨卡.sql";    //獲取腳本位置             if (File.Exists(path))             {                 FileInfo file = new FileInfo(path);                 string script = file.OpenText().ReadToEnd();                 script=script.Replace("H00001", CardNo);  //替換腳本里的參數                 try                 {                       //執行腳本                    SqlConnection conn = new SqlConnection(connectonstring);                    Microsoft.SqlServer.Management.Smo.Server server = new Server(new ServerConnection(conn));                    int i= server.ConnectionContext.ExecuteNonQuery(script);                    if (i == 1)                    {                        MessageBox.Show("恭喜!/n"+CardNo+" 補卡成功!","成功");                        txtCardNo.Text = "";                        CreateLog(CardNo, true);                    }                    else                    {                        MessageBox.Show("@_@ 再試一次吧!","失敗");                    }                                      }                 catch (Exception es)                 {                     MessageBox.Show(es.Message);                     CreateLog(CardNo + "  " + es.Message, false);                 }             }             else             {                 MessageBox.Show("腳本不存在!");                 return;             }         }復制代碼

方法三: 執行sql語句(最麻煩)

復制代碼
代碼 public static int ExecuteSqlScript(string sqlFile){    int returnValue = -1;    int sqlCount = 0, errorCount = 0;    if (!File.Exists(sqlFile))    {        Log.WriteLog(string.Format("sql file not exists!", sqlFile));        return -1;    }    using (StreamReader sr = new StreamReader(sqlFile))    {        string line = string.Empty;        char spaceChar = ' ';        string newLIne = "/r/n", semicolon = ";";        string sprit = "/", whiffletree = "-";                       string sql = string.Empty;        do        {            line = sr.ReadLine();            // 文件結束            if (line == null) break;            // 跳過注釋行            if (line.StartsWith(sprit) || line.StartsWith(whiffletree)) continue;            // 去除右邊空格            line = line.TrimEnd(spaceChar);            sql += line;            // 以分號(;)結尾,則執行SQL            if (sql.EndsWith(semicolon))            {                try                {                    sqlCount++;                    SqlHelper.ExecuteNonQuery(sql, null);                }                catch (Exception ex)                {                    errorCount++;                    Log.WriteLog(sql +  newLIne + ex.Message);                  }                                        sql = string.Empty;            }            else            {                // 添加換行符                if(sql.Length > 0) sql += newLIne;            }        } while (true);    }    if (sqlCount > 0 && errorCount == 0)        returnValue = 1;    if (sqlCount == 0 && errorCount == 0)        returnValue = 0;    else if (sqlCount > errorCount && errorCount > 0)        returnValue = -1;    else if (sqlCount == errorCount)        returnValue = -2;    return returnValue;}復制代碼

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲午夜激情免费视频| 夜夜嗨av一区二区三区免费区| 久久久久久久久久亚洲| 成人黄色片网站| 成人在线精品视频| 欧美猛交免费看| 中文字幕久热精品在线视频| 91精品国产自产在线观看永久| 欧美黑人一区二区三区| 欧美一级免费视频| 亚洲精品视频久久| 91精品国产777在线观看| 亚洲国产99精品国自产| 精品爽片免费看久久| 亚洲欧洲激情在线| 国产综合色香蕉精品| 亚洲欧美在线一区二区| 欧美日韩一区二区免费视频| 亚洲精品视频二区| 日韩精品视频在线观看免费| 午夜美女久久久久爽久久| 久久久久久午夜| 免费99精品国产自在在线| 久久青草福利网站| 91免费精品国偷自产在线| 国产在线拍偷自揄拍精品| 亚洲色图激情小说| 国产精品影片在线观看| 97欧美精品一区二区三区| 久久人人爽亚洲精品天堂| 日韩av在线资源| 国产精品偷伦视频免费观看国产| 欧美日韩中文字幕| 欧美第一页在线| 欧美激情网站在线观看| 97精品视频在线观看| 亚洲国产99精品国自产| 久久综合免费视频影院| 久久久久久久影院| 国产精品一区久久久| 国产精品久久视频| 亚洲香蕉伊综合在人在线视看| 亚洲香蕉成人av网站在线观看| 欧美与黑人午夜性猛交久久久| 日韩欧美在线网址| 日韩免费高清在线观看| 5566日本婷婷色中文字幕97| 亚洲国产成人精品女人久久久| 欧美日韩不卡合集视频| 国产欧美最新羞羞视频在线观看| 91精品国产91久久久久久吃药| 成人黄色片在线| 免费91麻豆精品国产自产在线观看| 亚洲欧美一区二区三区久久| 91色视频在线导航| 亚洲人成免费电影| 欧美日韩在线视频首页| 欧美国产日韩一区二区三区| 成人xvideos免费视频| 欧美黑人一级爽快片淫片高清| 亚洲国产精品热久久| 欧美性猛交xxxx免费看久久久| 亚洲成av人乱码色午夜| 亚洲精品欧美日韩| 91亚洲人电影| 久久久久久国产三级电影| 国产精品久久久91| 亚洲香蕉成人av网站在线观看| 黑人巨大精品欧美一区二区免费| 95av在线视频| 国产欧美精品日韩精品| 成人美女av在线直播| 国产成人综合av| 久久久久久久久久久av| 欧美日韩国产影院| 在线电影av不卡网址| 国产精品久久久久久久久久免费| 色狠狠av一区二区三区香蕉蜜桃| 欧美午夜视频在线观看| 亚洲欧美在线播放| 成人中文字幕在线观看| 91手机视频在线观看| 国产日韩中文字幕在线| 国产精品黄色av| 5252色成人免费视频| 国产女同一区二区| 色综合老司机第九色激情| 欧美在线国产精品| 中文字幕精品视频| 一本大道亚洲视频| 成人女保姆的销魂服务| 国产成人综合一区二区三区| 日韩电影视频免费| 97国产一区二区精品久久呦| 91久热免费在线视频| 麻豆一区二区在线观看| 国产精品久久久久久一区二区| 欧美日韩久久久久| 成人伊人精品色xxxx视频| 精品亚洲国产视频| 日产精品99久久久久久| 久久国产精品首页| 青青久久av北条麻妃海外网| 91精品91久久久久久| 亚洲国产精品久久久久秋霞不卡| 亚洲最大成人在线| 亚洲男人av在线| 色综合久久中文字幕综合网小说| 亚洲欧美综合精品久久成人| 91精品国产91久久久久福利| 亚洲欧美日韩图片| 日韩精品欧美激情| 亚洲视频日韩精品| 国产成人一区二区三区小说| 亚洲欧美激情精品一区二区| 97免费视频在线播放| 亚洲男女性事视频| 97精品国产91久久久久久| 欧美性xxxxhd| 亚洲综合中文字幕68页| 欧美日本精品在线| 羞羞色国产精品| 亚洲aⅴ日韩av电影在线观看| 国产亚洲人成网站在线观看| 亚洲精品二三区| 国内精品免费午夜毛片| 欧美成人三级视频网站| 亚洲欧洲成视频免费观看| 国产欧美日韩精品在线观看| 欧美激情第1页| 国产成人欧美在线观看| 成人黄色av免费在线观看| 亚洲精品国产精品国自产观看浪潮| 91国自产精品中文字幕亚洲| 国产亚洲一区二区精品| 欧美精品久久一区二区| xxxxxxxxx欧美| 国产欧美日韩丝袜精品一区| 国产中文字幕日韩| 亚洲女人天堂网| 亚洲福利影片在线| 91tv亚洲精品香蕉国产一区7ujn| 亚洲免费小视频| 国产在线精品自拍| 国产视频丨精品|在线观看| 久久成人精品电影| 国产成人短视频| 久久久亚洲国产天美传媒修理工| 91精品视频播放| 国产一区二区视频在线观看| 国产精品网红直播| 国内精品久久久久久影视8| 国产欧美精品在线| 国产精品成av人在线视午夜片| 欧美精品中文字幕一区| 欧美在线性爱视频| 久久久久久欧美| 中文字幕在线日韩| 午夜精品蜜臀一区二区三区免费| 欧美成人亚洲成人日韩成人| 亚洲欧美日韩中文在线| 日本久久久a级免费| 欧美性视频网站| 日本不卡高字幕在线2019|