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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据通讯方式_c# 与 Mysql 的通讯方式总结

發布時間:2024/1/23 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据通讯方式_c# 与 Mysql 的通讯方式总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩種開發方式

1.使用 vs 自帶的可視化工具,不推薦。

在 vs 的項目中添加 ‘數據集’,然后通過可視化的工具添加數據庫為數據源,默認可添加 SQL Server 和 Oracle 等,添加 Mysql 前需要額外安裝組件。

優點,自帶 sql 語句中特殊字符的轉義,不會出現 sql 注入的問題,配合數據綁定可以在項目前期快速推進項目進度。

缺點:可視化工具的使用并不流行,不利于開發團隊的招募和項目后期的修改維護。許多常用的功能很難使用,如:存儲過程,事務,連接池控制等。

2.引用 mysql.data.dll ,在此基礎上進行開發,推薦。

完全由代碼完成通訊過程。

優點:可以方便的使用各種功能,

缺點:需要手寫代碼,開發速度稍慢。

完整的通訊過程

1.建立連接,連接分 “長連接” 和 “短連接”

長連接在高頻次的通訊時快速高效,但是占用資源,在并發訪問下容易耗盡網絡資源,對于帶寬較低的局域網來說,如果大量使用長連接,會占用網速,影響使用體驗。

短連接在使用時 open, 使用完成后 close,此時連接資源會進入連接池,等待下次連接時使用。雖然資源未被釋放掉,但連接池的開銷不大,是完全可以接受的。短連接一樣需要考慮并發問題。

短連接在使用完成后可以直接 dispose,或者使用 using(){} 來限定連接的作用域,使用完成后自動釋放掉,不進入連接池,這種方式資源占用最少,但在需要反復建立連接的情況下連接效率較低。

在實際開發的時候最好使用短連接,并在使用結束后關閉并放入連接池。

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";

MySqlConnection conn= newMySqlConnection(connStr);

conn.Open();

conn.Close();

2.使用連接創建 sql 命令并執行

1.純 sql 語句,執行后有三種返回方式:

cmd.ExecuteScalar();  // 查詢結果僅一行一列,直接接收

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";

MySqlConnection conn= newMySqlConnection(connStr);

conn.Open();

MySqlCommand cmd=conn.CreateCommand();string name = "Tom";

cmd.CommandText= string.Format("select count(*) from student where Name = '{0}';", name);object obj = cmd.ExecuteScalar(); //可能未nullint count = 0;

if (!obj.Equals(DBNull.Value))

{

count = Convert.ToInt32(obj);}conn.Close();

MySqlDataReader reader = cmd.ExecuteReader();? // 通過 reader 獲得大量數據

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";

MySqlConnection conn= newMySqlConnection(connStr);

conn.Open();

MySqlCommand cmd=conn.CreateCommand();

cmd.CommandText= string.Format("select Name from student;");

MySqlDataReader reader=cmd.ExecuteReader();

List list = new List();while(reader.Read())

{

list.Add(reader.GetString("Name"));

}

reader.Close();

conn.Close();

cmd.ExecuteNonQuery();  // 獲得增刪改語句執行后影響的行數

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";

MySqlConnection conn= newMySqlConnection(connStr);

conn.Open();

MySqlCommand cmd=conn.CreateCommand();string name = "Tom";

cmd.CommandText= string.Format("update student SET Name='Tommy' where Name = '{0}';", name);int count =cmd.ExecuteNonQuery();

conn.Close();

普通 sql 語句的缺點:如果上面例子中的 name 參數中帶有單引號,整個 sql 語句將執行錯誤,因為未對特殊字符進行轉義。主要特殊字符有單引號,反斜杠,# 等,而這些特殊字符在不同的使用情況下有時需要轉義,有時不需要轉義。Mysql 提供了類似 QUOTE(str) 這樣的字符串處理函數,但不能完全滿足要求。

這就是 sql 注入,sql 注入的概念網上資料較多,在此不再贅述,而常用的解決方案是采用參數化的 sql 語句。

2.sql 語句和 sql 參數

帶有參數的 sql 語句和 sql 參數會分開傳入數據庫服務器中,服務器先將 sql 語句進行編譯,然后將 sql 參數導入編譯后的 sql 語句中(在此過程中自動對特殊字符進行轉義),從而從根源上防止了 sql 注入的發生。

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";

MySqlConnection conn= newMySqlConnection(connStr);

conn.Open();

MySqlCommand cmd=conn.CreateCommand();

cmd.CommandText= "select count(*) from student where Name = @Name;";cmd.Parameters.AddWithValue("@Name", "Tom");

object obj = cmd.ExecuteScalar(); //可能為null int count = 0;if (!obj.Equals(DBNull.Value)) { count=Convert.ToInt32(obj); } conn.Close();

3.DataAdapter

private static void Test(MySqlCommand cmd)

{

//獲取記錄

DataTable dt1 = new DataTable();

cmd.CommandText = "select * from table1;";

MySqlDataAdapter da = new MySqlDataAdapter(cmd);

da.Fill(dt1);

//插入記錄

cmd.CommandText = "select * from pet where 1=0;";

da = new MySqlDataAdapter(cmd);

MySqlCommandBuilder cb = new MySqlCommandBuilder(da);

da.UpdateCommand = cb.GetInsertCommand();

DataTable dt2 = new DataTable();

da.Fill(dt2);

//對dt2進行賦值

da.Update(dt2);

}

4.事務

多條 sql 語句的組合會出現某一條 sql 語句執行出錯,而其他 sql 語句順利執行的情況,這可能與預期不符合。此時需要使用事務。

事務在執行出錯時可以回滾。

事務往往帶有多條 sql 語句,在使用參數化的 sql 語句時要注意參數名稱不能相同。

conn.Open();

MySqlCommand cmd=conn.CreateCommand();

MySqlTransaction myTrans=conn.BeginTransaction();

cmd.Connection=conn;

cmd.Transaction=myTrans;

cmd.CommandText= "";

cmd.ExecuteNonQuery();

myTrans.Commit();

conn.Close();

5.存儲過程

不論是 sql 語句還是事務,在傳輸指令的時候都需要耗費大量的時間,數據庫編譯這些指令也需要耗費大量時間,這不利于高訪問量的數據庫的運行。

存儲過程是將 sql 指令寫在數據庫中,此時數據庫直接完成編譯,與數據庫通訊是只需要傳遞參數即可。節省了傳輸時間和編譯時間。

conn.Open();

MySqlCommand cmd=conn.CreateCommand();

cmd.CommandType=CommandType.StoredProcedure;

cmd.CommandText= "SpFillStudent";

MySqlParameter paraMoney;

paraMoney= cmd.Parameters.Add("@inMoney", MySqlDbType.Decimal);

paraMoney.Direction=ParameterDirection.Input;

paraMoney.Value= 50;

MySqlParameter paraTradeType;

paraTradeType= cmd.Parameters.Add("@inTradeType", MySqlDbType.String);

paraTradeType.Direction=ParameterDirection.Input;

paraTradeType.Value= "會員卡充值";

MySqlParameter paraPayDetailStr;

paraPayDetailStr= cmd.Parameters.Add("@inPayDetailStr", MySqlDbType.String);

paraPayDetailStr.Direction=ParameterDirection.Input;

paraPayDetailStr.Value= "";

MySqlParameter paraOutResult;

paraOutResult= cmd.Parameters.Add("@outResult", MySqlDbType.String);

paraOutResult.Direction=ParameterDirection.Output;

cmd.ExecuteNonQuery();string result = (string)paraOutResult.Value;

conn.Close();

總結

以上是生活随笔為你收集整理的mysql数据通讯方式_c# 与 Mysql 的通讯方式总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美a级片视频 | av中文在线观看 | 69视频国产 | 国产精品第2页 | 国产综合视频在线 | 男人疯狂高潮呻吟视频 | 午夜成人影视 | 玉足脚交榨精h文 | 国产精品乱码妇女bbbb | 激情成人av| 男女激情实录 | 叼嘿视频91| 综合色影院 | 欧美激情在线一区二区 | 亚洲综合第一 | 国产福利在线免费观看 | 亚洲啪av永久无码精品放毛片 | 奶罩不戴乳罩邻居hd播放 | 自拍偷拍欧美视频 | 中文字幕在线观看一区二区 | 狠狠艹av| 成人小视频在线看 | 好吊妞精品 | 天堂一二三区 | 91午夜精品亚洲一区二区三区 | 麻豆av一区二区三区久久 | 天天摸夜夜 | 亚洲欧美另类激情 | 91激情影院 | 一本色道久久综合亚洲精品 | 国产成人一区二区三区别 | 天天干天天操天天爽 | www国产精品| 色妇网| 欧美精品日韩少妇 | 亚洲综合色站 | 人人艹人人 | 国产精品一区二区三区高潮 | 久久精品国产亚洲av麻豆蜜芽 | 久久天堂av | 亚洲AV无码成人精品区东京热 | 男女www视频 | 免费在线你懂的 | 看免费一级片 | av电影一区二区 | 国产视频欧美视频 | 亚洲成人精品网 | 久久阁 | 国产h片在线观看 | 亚洲av永久无码精品国产精品 | 国产免费av一区二区 | 亚洲天堂手机在线观看 | 久久这里有精品 | 黑帮大佬和我的365日第二部 | 国产九区 | 视频这里只有精品 | 青青操91 | 亚洲精品国产精品国自产观看 | www.香蕉视频在线观看 | 想要xx视频 | 91麻豆精品国产91久久久久久久久 | 精品在线视频免费 | 三级黄色在线播放 | 亚洲精品短视频 | 亚洲一区二区日韩 | 香蕉网伊 | 久久一区二区三区精品 | 台湾佬美性中文娱乐网 | 潮喷失禁大喷水aⅴ无码 | 女性裸体下面张开 | 激情内射亚洲一区二区三区爱妻 | 中文字幕狠狠 | 亚洲欧美变态另类丝袜第一区 | 午夜视频黄 | 日韩一区二区三区在线观看视频 | 久久免费观看视频 | 祥仔视觉av | 欧美一级免费大片 | 亚洲性网 | 国产精品影院在线观看 | www国产精品视频 | 久草综合在线 | 中文在线观看免费视频 | 拔插拔插华人 | 亚洲国产精品一区 | 欧美日韩网址 | 久久久成人精品一区二区三区 | 白丝美女被草 | 精品国产乱码久久久久夜深人妻 | 长篇乱肉合集乱500小说日本 | 操操操操操操操操操 | 久久精品国产亚洲av嫖农村妇女 | 亚洲激情图 | 午夜免费成人 | 在线观看av网页 | 国产探花在线观看 | 日本a视频在线观看 | 喷水少妇 | 日韩在线视频你懂的 |