C#讀取.sql檔案並執行檔案中的sql
有些時候我們需要在程式中編寫讀取sql指令碼檔案並執行這些sql語句,但是我們在有些時候會遇到讀出來的sql語句不能執行,其實不能執行並不是你的sql指令碼檔案有錯誤,而是去執行sql語句的時候,而是C#程式碼裡面執行sql語句的程式碼對sql裡面的一些標誌字元不識別罷了,下面有兩種方法可以實現讀取sql檔案並執行:
第一種方法是將sql指令碼檔案中的sql語句全部讀取出來,然後使用C#程式碼去執行sql語句,但是這種方法的缺陷是:不能有Go識別符號,還有不能執行建立檢視的語句,如果有上述語句C#程式碼執行sql語句的時候就會出錯,切記以上兩點,廢話不多說上程式碼:
/// <summary>
/// 利用陣列獲取sql指令碼檔案中的sql語句
/// </summary>
/// <param name="targetdir">路勁</param>
/// <param name="dbname">資料庫名</param>
/// <returns></returns>
public static ArrayList Getarraylist(string targetdir, string dbname)
{
ArrayList sqllist = new ArrayList();
try
{
System.IO.FileInfo FileInfo = new System.IO.FileInfo(targetdir + "kmsnew.sql");
string path = Path.Combine(targetdir, "kmsnew.sql");
string commandText = "";
string varLine = "";
StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
while (sr.Peek() > -1)
{
varLine = sr.ReadLine();
varLine=varLine.Replace("[kms]","["+dbname+"]");
if (varLine == "")
{
continue;
}
if (varLine != "GO" && varLine != "go"&&varLine.Substring(0,1)!="/")
{
commandText += varLine;
commandText += "\r\n";
}
else
{
sqllist.Add(commandText);
commandText = "";
}
}
//string line = sr.ReadToEnd();
sr.Close();
//line = line.Replace("[kms]", "[" + dbname + "]");
return sqllist;
}
catch (Exception e)
{
throw new InstallException(e.Message);
}
}
//將獲取到的資料傳入這個函式就可以執行sql語句
public static void ExcuteSql(SqlConnection connectstring,Arraylist sql) {
try
{
SqlTransaction varTrans = connectstring.BeginTransaction();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connectstring;
cmd.Transaction = varTrans;
foreach(string sqlstring in sql)
{
if (sqlstring != null)
{
cmd.CommandText = sqlstring;
cmd.ExecuteNonQuery();
}
}
varTrans.Commit();
}
catch (Exception e)
{
throw new InstallException(e.Message);
}
}
方法二:本人建議使用方法二,因為方法二沒有方法一那麼多限制條件,不論是什麼sql語句,只要能在sqlserver中執行的語句,它全部都能執行,程式碼如下:
///<summary>
///利用osql實現執行sql指令碼檔案
/// </summary>
//利用osql實現執行sql指令碼檔案
public static void excutesqlfile(string user,string pwd,string databasename,string targetdir) {
System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
sqlProcess.StartInfo.FileName = "osql.exe ";
sqlProcess.StartInfo.Arguments = " -U "+資料庫使用者名稱+" -P "+資料庫密碼+" -d "+資料庫名稱+" -i "+檔案路勁+"kmssql.sql";
sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
sqlProcess.Start();
sqlProcess.WaitForExit();//程式安裝過程中執行
sqlProcess.Close();
}
如果在上面程式碼中有人不知道osql是什麼,自己可以百度看看,瞭解瞭解它是多麼的強大。
相關推薦
C#讀取.sql檔案並執行檔案中的sql
有些時候我們需要在程式中編寫讀取sql指令碼檔案並執行這些sql語句,但是我們在有些時候會遇到讀出來的sql語句不能執行,其實不能執行並不是你的sql指令碼檔案有錯誤,而是去執行sql語句的時候,而是C#程式碼裡面執行sql語句的程式碼對sql裡面的一些標誌字元不識別罷了
C#從資料庫中讀取二進位制流並生成檔案
下面以圖片檔案為例加以說明。從資料庫表 “圖片儲存”中讀取ID為1的圖片資料並生成圖片檔案。 MySqlConnection conn = new MySqlConnection("Server=localhost;Database=test;charset=utf8;U
關於Python中讀取寫入檔案並進行檔案與使用者互動的操作
一、提前知識點 在python中是同樣和其他語言一樣可以進行檔案的讀取寫入操作,值得注意的是,Python中開啟檔案讀取的方式有幾種,分別是以下幾種: 1 f = open('username.txt') 2 first_line = f.readline() 3 print('fi
linux C 讀取目錄檔案並統計檔案數
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <errno.h> #include <string.h> #define MAX 1024
Docker建立映象檔案並在容器中執行
1.如何建立映象檔案 首先找到Docker ToolBox安裝的路徑,在路徑下直接新建Dockerfile檔案 在Dockerfile檔案裡寫入的內容為: FROM docker/whalesay:latest RUN apt-get -y update && apt-get inst
bash讀取txt檔案, 並在瀏覽器中以表格形式輸出
例如文字 data.txt 1 201623210021 wangzhiguo 25 2 201623210022 yangjiangbo 26 3 201623210023 yangzhen 24 4
C#建立檔案並往檔案中寫入資訊
string filepath = Server.MapPath("~/Upfile") + "\\"; //要上傳的資料夾的路徑 if (!Directory.Exists(filepath)) //不存在資料夾,建立 {
通過os.walk進行目錄遞迴,讀取檔案並找到檔案中指定內容
Mark:通過os.walk進行整個檔案目錄的遞迴遍歷,那麼walk的語法如下:walk()方法語法格式如下:os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])引數:top -- 是你所要遍歷的目
mac下使用vim gcc/g++ 編譯cpp(c++)檔案並執行
首先確認gcc和g++版本,二者是否一致 命令:gcc -v;g++ -v 然後vim 編寫c++檔案,比如:#include <iostream>..... 最後儲存的時候要注意,exit+:sav+cppname.cpp “.cpp”字尾保證編譯器識別是c+
AHK 遍歷資料夾下ahk檔案並執行與刪除
folder = D:\ver_upload\new Loop, %folder%\*.ahk FileList = %FileList%%A_LoopFileTimeModified%`t%A_LoopFileName%`n Sort, FileList ;根據日期排序.從小到大 Loo
mac 建立shell檔案並執行
shell初學 1 桌面上建立一個ShellLearn的資料夾 2 我使用的是系統自帶的文字編輯器,新建一個文稿,輸入echo hellow world 3 儲存該文字檔案,注意,此時系統不讓修改檔案的格式為sh,所以儲存的是預設的rtf格式的 4 手動修改3步中的檔案格式為sh
C語言獲取當前編譯執行檔案(XXX.exe)檔名和目錄路徑
C語言獲取當前編譯執行檔案(XXX.exe)檔名和目錄路徑 vc2010編譯通過 #include<stdio.h> #include<string.h> #include<windows.h> #include<stdlib.h> int ma
java按行讀取檔案並對檔案進行加密和解密
package com.alibaba.datax.plugin.reader.selfxmlfilereader.util; import java.io.UnsupportedEncodingException; import java.security
【C++】C++讀取特定路徑下所有檔案//*(資料夾下的所有圖片、文件等)
內容:主要有兩種,一是藉助相關結構體,二是針對檔名排練有序。 一、藉助結構體 1.引用標頭檔案 #include <io.h> #include < fstream> #include < string> 2.適用範圍 沒有限制。
JAVA 讀取檔案並更改檔案內容
private void autoReplace(String filePath,String outPath) throws IOException{ File file=new File(filePath); Long fileLength=file.le
c#程式打包成可執行檔案
經過朋友(lcm)的耐心指導,輕鬆完成了c#程式的打包,希望能夠幫助更多的戰友輕鬆打包c#。 一:前期準備工作 使用《innosetup_5.5.9》工具實現c#程式打包,程式下載地址: htt
C++讀取歌詞(lrc)檔案,分解歌詞時間標籤和歌詞文字的方法
本人最近在寫一個音樂播放器,做了一個顯示歌詞的功能。雖然很多已經有很多人有自己的辦法,在這裡我還是想介紹一下我自己的方法。 讀取歌詞檔案並不困難,因為lrc格式的歌詞本身很有規律,下面為一個lrc檔案的一部分: [ti:なわとび] [ar:小泉花陽(CV.久保ユリカ)] [
Windows遠端連線Ubuntu,上傳檔案並執行matlab
在管理實驗室(中國海洋大學視覺實驗室 )伺服器的過程中,經常有同學會找管理員詢問如何在Windows系統下,遠端連線Ubuntu系統,上傳檔案至伺服器,並執行matlab程式碼。現將步驟總結如下:(1)配置系統,使得Windows系統可以遠端連線Ubuntu系統(2)通過wi
如何在Eclipse中書寫SQL語句並執行
Eclipse算是java開發者最熟悉的一種開發工具了,今天給大家簡單的介紹一下如何在Eclipse中書寫sql語名,當然它還是沒有專門的sql工具好用,個人用的也不是很多。首先建立一個SQL檔案Name:連線名稱如果遇到這種情況,無法點選ok,不要急,點選JAR List。
android 以追加形式寫檔案並把檔案儲存到SD卡中
android手機記憶體本來就不大,要是老把資料放在手機裡,很明顯會讓手機的使用者體驗到什麼是“卡”,所以,我們把資料要放到SD卡中,以減少手機記憶體的使用,本文僅寫入檔案,不對讀檔案進行說明。好,go! 第一步:新建android專案,命名為Test next ->