日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#连接数据库PostSQL-NpgSQL

發布時間:2023/12/9 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#连接数据库PostSQL-NpgSQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#NpgSQL連接數據庫PostSQL

??最近在做一個GIS的圖像處理系統,功能設計涵蓋大量的數據存儲和訪問。思來想去:數據存儲到SHP文件的字段中,雖然比較方便但是訪問檢索總是不那么方便,數據庫是必須的。桌面端連接數據庫之前確實沒有整過,只用JS管理過一次。就那次還是學校作業直接拷貝桂桂大兄弟的,這次自己搞了。C#連接本地PostSQL數據庫。加油,阿喵一定行。
??主要內容: ①NpgSQL使用,②數據庫連接,③數據庫增刪改查。



1. NpgSQL使用
2. 數據庫使用邏輯及說明
2. 數據庫連接
3. 增刪改查常用方法
4. 使用示例

1.NpgSQL使用

??應該是專門用來管理PostSQL數據庫的吧,開源的。其他的數據庫不知道能不能訪問。PostSQL就不多說了,安裝很方便,使用起來自帶的Pgadmin好像確實有點捉急,配合Navicat管理倒是不錯。使用C#訪問本地數據庫,特別是PostSQL的話,就用NpgSQL就Ok了,直接用NuGet為你的解決方案添加即可。右擊選擇“管理NuGet程序包”

??在彈出的對話框中搜索NpgSQL,選擇對應版本就可以了。具體版本我沒找到明確說明,但是我 自己的程序是4.0,所以選了一個比較低的版本——2.2.0。還可以使用沒有大問題。

2.數據庫使用邏輯及說明

??使用代碼訪問操作部署在本地的數據,其實比我們想象的復雜很多。不然也不會單獨有專門的課程、職業來研究和從事相關的工作。我們個人使用的話,可視化來講無非是在一個表格(Table)中插入或者修改值。只要我們細心一點,就能按時按需完成操作。可是當我們需要修改、查找大量數據的時候,就會力不從心。
??所以數據庫本身也有一定的機制來保證大量數據能夠存儲的穩定,池。最大限度訪問量是一個池,池有點抽象,安全得來講就是數據庫是個房間,進出房間要把門關好。不僅是大量的數據,還可能有大量用戶同時操作。這其中不同人的身份、權限不一樣,能進行的操作的也不一樣。不僅如此,一個數據同時供多人的查看,就可能會發生的一定的錯誤。(回憶起了老師上課講的范式啊什么的,忘了OJ2…)
??說明:本文不搞復雜就是連接、增刪改查,自己的系統用不到;太嚴謹的我也不會寫;追求高級設定的應該不會看我的博文。對于還在連接和訪問這一步糾結的小白來講,提醒一下:以下方法對基本數據庫的基本操作有所封裝,我也會盡量做注釋說明。

3.數據庫連接

??連接本地數據庫就是拿出鑰匙打開房門。這把對應你本地安裝的數據庫、需要用戶名及密碼驗證的鑰匙,就是:連接。當然,你不會沒事干就去數據庫房里轉一圈,所以在你的程序設計中,當需要對數據庫范根操作之前,需要打開連接(Connectio.open());完事之后要關閉連接(Connection.close.())
??以下將配置連接的方法封裝為“fun_getConnection”,返回一個類型為“NpgsqlConnection”的變量,其實就是連接本身。視需要,打開或關閉。

//配置數據庫連接返回數據庫連接 public static NpgsqlConnection fun_getConnection(){//配置數據庫連接,Port安裝默認端口號為5432string hostname = "localhost";string username = "postgres";string password = "mypassword";string database = "sql——test";string connecstr = string.Format("PORT=5432;DATABASE={0};HOST={1};PASSWORD={2};USER ID={3};Pooling = false", database, hostname, password, username); //配置數據庫連接字符串NpgsqlConnection npsqlconn = new NpgsqlConnection(connecstr); //生成數據庫連接 return npsqlconn; }

4.數據庫使用——增刪改查

??還是封裝,我把能封裝的都封裝了。不過也有一部分不太科學,適用我這個系統的需求,各位看官如需使用可能還要修改。我盡量說明白。不管增刪改查都是通過設置好的連接,讓它執行對應的SQL(SQL百科)語句實現數據操作。 相當于對設置好的連接發送指令,然后執行。
??相當于,完成某一功能需要兩步①設置SQL語句,②執行SQL語句。我這邊把編譯不同的功能(增刪改查)封裝一個獨立的方法,將執行命令的部分單獨封裝——“ExecuteNonQuery”,每個功能之后加入該方法進而實現。
??首先是執行命令的方法,有兩個。區別在于形參是否包含待處理的SQL參數。即完整SQL語句使用執行命令一“ExecuteNonQuery”;帶參SQL使用執行命令二“ExecuteCommand” 執行命令之前,通過上文所述方法獲取數據庫連接,并打開。使用后關閉連接。

//執行命令方法一public static int ExecuteNonQuery(string sqlstr){ try{//獲取數據庫連接,見章節三NpgsqlConnection conn = fun_getConnection();//打開數據連接conn.Open();using (NpgsqlCommand SqlCommand = new NpgsqlCommand(sqlstr, conn)){Console.WriteLine("即將執行SQL語句: " + sqlstr);int c = SqlCommand.ExecuteNonQuery(); //執行查詢并返回受影響的行數conn.Close();//r如果是>0操作成功! return c; }}catch{return 0;}}//帶參數的執行命令public static int ExecuteCommand(string sqlstr, params NpgsqlParameter[] values){NpgsqlConnection conn = fun_getConnection();using (NpgsqlCommand cmd = new NpgsqlCommand(sqlstr, conn)){Console.WriteLine("即將執行SQL語句: " + sqlstr);cmd.Parameters.AddRange(values);conn.Open();return cmd.ExecuteNonQuery();}}

??新建表操作,輸入表名和對應的列名即可,并返回表名。

public static string fun_createNewDB(string date) {string dBName = "dt" + date;string sqlstr = string.Format("CREATE TABLE {0} (id varchar(10) COLLATE pg_catalog.default NOT NULL,exg numeric,exr numeric,rgbi numeric,vari numeric,rgbvi numeric,ndi numeric,cive numeric,exg_exr numeric,lri numeric,fw numeric,dw numeric,pmc numeric)", dBName);// NpgsqlConnection conn = fun_getConnection();int c = ExecuteNonQuery(sqlstr);return dBName;}

??增刪改查,返回受影響行數

/// <summary>/// 插入,新建一行/// </summary>/// <param name="w_tableName">表名</param>/// <param name="w_valuse">數值list</param>/// <returns></returns>public static int fun_Add(string w_tableName, ArrayList w_valuse){//設置SQL語句,我使用的數值是8個 可以根據需要使用循環改善string str = string.Format("insert into {0} values ({1},{2},{3},{4},{5},{6},{7},{8},{9})", w_tableName, w_valuse[0], w_valuse[1], w_valuse[2], w_valuse[3], w_valuse[4], w_valuse[5], w_valuse[6], w_valuse[7], w_valuse[8]);//執行語句int c = ExecuteNonQuery(str); //返回受影響的行數return c;}/// <summary>/// 刪除數據/// </summary>/// <param name="w_table">表名</param>/// <param name="id"></param>/// <returns></returns>public static int fun_delete(string w_table,int id){string sql = "delete from "+ w_table+"users where id =" + id + "";//執行語句int c = ExecuteNonQuery(sql);return c;}/// <summary>/// 更新數據/// </summary>/// <param name="w_table">表名</param>/// <param name="v">更新數值+ID</param>/// <returns></returns>public static int fun_update(string w_table, ArrayList v){if (w_table == " "){System.Windows.Forms.MessageBox.Show("參數有誤");int c = 0;return c;}else{string sqlstr = string.Format("update {0} set fw= '{1}',dw='{2}',pmc='{3}' where id = '{4}' ", w_table, v[1], v[2], v[3],v[0]);int c = ExecuteNonQuery(sqlstr);return c;}//參數較多較麻煩可以用下面這個方法實現,使用待參執行,用執行語句命令二實現//string update_sql = "update @tablename set fw_uav = '@fw',dw_uav='@dw',pmc_uav='@pmc' where id = '@id'";//NpgsqlParameter[] values = new NpgsqlParameter[]//{// new NpgsqlParameter("@id",v[0]),// new NpgsqlParameter("@fw",v[1]),// new NpgsqlParameter("@dw",v[2]),// new NpgsqlParameter("@pmc",v[3]),// };// int c = pgHelper.ExecuteCommand(update_sql, values);// return c;}/// <summary>/// 查找 /// </summary>/// <param name="w_columns">返回列名 默認*</param>/// <param name="w_table">表名</param>/// <param name="w_where">條件語句,完整where</param>/// <returns></returns>public static DataSet fun_search(List<string> w_columns, string w_table, string w_where){//判斷參數string columns = "";string where = "";string tablename = w_table;string str = "";//SQL語句//設置返回列名,無則全部返回if (w_columns.Count == 0){columns = "*";}else{for (int i = 0; i < w_columns.Count; i++){columns += w_columns[i].ToString() + ",";}columns = columns.Substring(0, columns.Length - 1);//刪除最后一個,}//設置查詢條件if (w_where != ""){where = w_where;str = string.Format("select {0} from {1} {2}", columns, w_table, where);}else{str = string.Format("select {0} from {1}", columns, w_table);}NpgsqlConnection conn = fun_getConnection();using (NpgsqlCommand SqlCommand = new NpgsqlCommand(str, conn)){DataSet dataSet = new DataSet();NpgsqlDataAdapter nda = new NpgsqlDataAdapter(SqlCommand);nda.Fill(dataSet);conn.Close();return dataSet;}}

5.完整使用示例

??將上述方法封裝成類“pgHelper.cs”,添加到解決方案中

private void btn_Test_Click(object sender, EventArgs e){string tablename = "Testtable"//新建數據庫string tablename = pgHelper.fun_createNewDB(tablename);//存儲數據,省略Values設置int reslutVount = pgHelper.fun_Add(tablename, values);//數據庫查詢 valuelist為空對應獲取全部值 表名 查詢條件DataSet r = pgHelper.fun_search(valueList, tablename, sqlstr);}

返回目錄


歡迎大家反饋交流。
本文鏈接:https://blog.csdn.net/qq_38560619/article/details/107524546

總結

以上是生活随笔為你收集整理的C#连接数据库PostSQL-NpgSQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。