1. 程式人生 > >C#讀取.sql檔案並執行檔案中的sql

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 ->