VS2022連接數(shù)據(jù)庫MySQL并進(jìn)行基本的表的操作指南
vs2022中連接MySQL
1.連接MYSQL
2.添加MySQL的引用
環(huán)境配置
測試代碼
在vs里面運(yùn)行sql語句
啟動(dòng)vs2022,在菜單欄里面選擇視圖,打開服務(wù)器資源管理器
右鍵數(shù)據(jù)連接,點(diǎn)擊添加連接
然后發(fā)現(xiàn)有MySQL選項(xiàng),進(jìn)入里面配置數(shù)據(jù)庫的相關(guān)信息即可
配置信息
1.server name輸入MySQL的IP地址
localhost即本地
2.然后輸入MySQL的用戶名和密碼
3.Database的內(nèi)容輸入test
添加MySQL的引用
環(huán)境配置
(1)打開mysql的安裝包,查看是否有include和lib兩個(gè)文件
(2)打開vs2020,新建工程,保存工程文件路徑
(3)將mysql的lib和include文件添加到工程路徑下
(4)打開VC++目錄,在包含目錄中,將mysql安裝文件中的include文件的路徑添加到包含目錄
(5)還在屬性頁上,打開 C/C++
(6)還是在屬性頁上,點(diǎn)開鏈接器選項(xiàng),點(diǎn)擊常規(guī),將mysql安裝文件夾中的lib文件路徑添加到附加庫目錄中:
(7)還是在屬性頁的鏈接器中,點(diǎn)擊第二項(xiàng)輸入,將libmysql.lib文件加進(jìn)來,注意,這里直接把libmysql.lib這個(gè)依賴名加進(jìn)xing,不要加路徑。這個(gè)文件也在mysql安裝文件夾中l(wèi)ib目錄下:
(8)將libmysql.dll放到該文件夾下
測試代碼
#include <stdio.h> #include <WinSock.h> #include <Windows.h> #include <mysql.h> #include<iostream> using namespace std; MYSQL mysql; //mysql連接 MYSQL_RES* res; //一個(gè)結(jié)果集結(jié)構(gòu)體 MYSQL_ROW row; //char** 二維數(shù)組,存放一條條記錄 const char DataBase_UserName[] = "root"; //數(shù)據(jù)庫用戶名username const char DataBase_Password[] = "@"; //數(shù)據(jù)庫密碼,填自己的密碼 const char DataBase_Host[] = "localhost"; //數(shù)據(jù)庫連接地址 //注意有時(shí)候使用主機(jī)ip會(huì)報(bào)錯(cuò),此時(shí)可以將ip改為localhost const char DataBase_Name[] = "test_db"; //database name unsigned int DataBase_Port = 3306; //server port bool ConnectDatabase(); //函數(shù)申明 void FreeConnect(); //釋放資源 void main() {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> ConnectDatabase(); //連接數(shù)據(jù)庫 //查詢數(shù)據(jù) //選擇該數(shù)據(jù)庫中的一個(gè)表的所有數(shù)據(jù) sheet8 是一個(gè)數(shù)據(jù)表 mysql_query(&mysql, "SELECT * from sheet8"); //獲取結(jié)果集 res = mysql_store_result(&mysql); //顯示數(shù)據(jù) //給ROW賦值,判斷ROW是否為空,不為空就打印數(shù)據(jù)。 while (row = mysql_fetch_row(res)) {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> printf("%s ", row[0]);//打印ID printf("%s ", row[1]);//打印ID cout << endl; } getchar(); } bool ConnectDatabase() {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> //初始化mysql mysql_init(&mysql); //連接mysql,數(shù)據(jù)庫 if (!(mysql_real_connect(&mysql, DataBase_Host, DataBase_UserName, DataBase_Password, DataBase_Name, DataBase_Port, NULL, 0))) //中間分別是主機(jī),用戶名,密碼,數(shù)據(jù)庫名,端口號(可以寫默認(rèn)0或者3306等),可以先寫成參數(shù)再傳進(jìn)去 {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> printf("Error connecting to database:%s\n", mysql_error(&mysql)); return false; } else {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> MessageBoxA(NULL, "連接MYSQL數(shù)據(jù)成功!", "消息", MB_OK); printf("Connected...\n"); return true; } } //釋放資源 void FreeConnect() {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> //釋放資源 //mysql_free_result(res); mysql_close(&mysql); }
使用DataGridView控件顯示數(shù)據(jù)庫中的數(shù)據(jù) 核心代碼
private void AllSearch_Load(object sender, EventArgs e) { MySqlConnection conn; string constr = "server=localhost;database=data;uid=choujieyun;pwd=12345678;"; conn = new MySqlConnection(constr); conn.Open(); MySqlCommand co = new MySqlCommand("select * from 表名;", conn); MySqlDataAdapter adapt = new MySqlDataAdapter(); adapt.SelectCommand = co; DataSet ds = new DataSet(); adapt.Fill(ds, "學(xué)生表"); dataGridView1.DataSource = ds.Tables["學(xué)生表"]; DataSet ds = new DataSet(); adapt.Fill(ds, "課程表"); dataGridView1.DataSource = ds.Tables["課程表"]; DataSet ds = new DataSet(); adapt.Fill(ds, "教師表"); dataGridView1.DataSource = ds.Tables["教師表"]; DataSet ds = new DataSet(); adapt.Fill(ds, "成績表"); dataGridView1.DataSource = ds.Tables["成績表"]; conn.Close(); }
1.學(xué)生表
2.課程表
3.教師表
4.成績表
實(shí)現(xiàn)基本的crud操作
核心代碼:
//引入的命名空間 using?System.Data.SqlClient;//用于SQL?Sever數(shù)據(jù)訪問的命名空間 using?System.Data;???????????????//DataSet類的命名空間 using?System.Windows.Forms;??//DataGridView控件類的命名空間 //數(shù)據(jù)庫查詢 //執(zhí)行指定的SQL命令語句(insert,delete,update等),并返回命令所影響的行數(shù) public?static?int?executeCommand(string?sqlStr) { ????SqlConnection?sqlConnection1?=?new?SqlConnection("server=dell-PC;database=11071312HotelSys;uid=sa;pwd=xiaoyi9421");//創(chuàng)建數(shù)據(jù)庫連接(字符串中是我個(gè)人的數(shù)據(jù)庫信息) ????sqlConnection1.Open();??????//打開數(shù)據(jù)庫連接 ????SqlCommand?sqlCommand1?=?new?SqlCommand(sqlStr,?sqlConnection1);??//執(zhí)行SQL命令 ????int?Succnum?=?sqlCommand1.ExecuteNonQuery(); ????return?Succnum; } //查詢(select)指定的數(shù)據(jù)記錄(多行多列),并填充到數(shù)據(jù)控件DataGridView中 public?static?void?queryDataToGrid(string?sqlStr,?DataGridView?dataGridView1) { ????SqlConnection?sqlConnection1?=?new?SqlConnection("server=dell-PC;database=11071312HotelSys;uid=sa;pwd=xiaoyi9421");//創(chuàng)建數(shù)據(jù)庫連接 ????SqlDataAdapter?sqlDataAdapter1?=?new?SqlDataAdapter(sqlStr,?sqlConnection1);//利用已創(chuàng)建好的sqlConnection1,創(chuàng)建數(shù)據(jù)適配器sqlDataAdapter1 ????DataSet?dataSet1?=?new?DataSet();??//創(chuàng)建數(shù)據(jù)集對象 ????sqlDataAdapter1.Fill(dataSet1);????//執(zhí)行查詢,查詢的結(jié)果存放在數(shù)據(jù)集里 ????dataGridView1.DataSource?=?dataSet1.Tables[0];?//把數(shù)據(jù)集中的查詢結(jié)果綁定dataGridView1中 } //查詢(select)指定的數(shù)據(jù)(單個(gè)數(shù)據(jù),假設(shè)為string類型),并返回 public?static?string?queryData(string?sqlStr) { ????SqlConnection?sqlConnection1?=?new?SqlConnection("server=dell-PC;database=11071312HotelSys;uid=sa;pwd=xiaoyi9421");//創(chuàng)建數(shù)據(jù)庫連接 ????SqlDataAdapter?sqlDataAdapter1?=?new?SqlDataAdapter(sqlStr,?sqlConnection1);//利用已創(chuàng)建好的sqlConnection1,創(chuàng)建數(shù)據(jù)適配器sqlDataAdapter1 ????DataSet?dataSet1?=?new?DataSet();??//創(chuàng)建數(shù)據(jù)集對象 ????sqlDataAdapter1.Fill(dataSet1);????//執(zhí)行查詢,查詢的結(jié)果存放在數(shù)據(jù)集里 ????return?dataSet1.Tables[0].Rows[0]["列名"].ToString();?//把查詢結(jié)果的第一行指定列下的數(shù)據(jù)以string類型返回 } //數(shù)據(jù)庫添加 private?void?btn_add_Click(object?sender,?EventArgs?e) ????????{ ????????????string?sql?=?"insert?into?課程表(CourseId,CourseName,Teald)?values(‘0004',‘物理',‘0004'); ????????????????int?i=help.changeSqlData(sql); ????????????if?(i?==?0)?MessageBox.Show("添加失敗",?"提示:"); ????????????else?MessageBox.Show("添加成功",?"提示:"); ????????} //數(shù)據(jù)庫刪除 private?void?btn_delete_Click(object?sender,?EventArgs?e) ? ? ? ? { ????????????string?sql?=?"delete?from 學(xué)生表?where StuId='0008'; ????????????int?i=help.changeSqlData(sql); ????????????if?(i?==?0)?MessageBox.Show("刪除失敗",?"提示:"); ????????????else?MessageBox.Show("刪除成功",?"提示:"); ????????} //數(shù)據(jù)庫修改 private?void?btn_update_Click(object?sender,?EventArgs?e) ? ? ? ? { ????????????string?sql?=?"update 學(xué)生表?set StuAge="19" where StuId="0008"; ????????????int?i?=?help.changeSqlData(sql); ????????????if?(i?==?0)?MessageBox.Show("修改失敗",?"提示:"); ????????????else?MessageBox.Show("修改成功",?"提示:"); ????????}
增加一行數(shù)據(jù)(課程表中增加一行數(shù)據(jù))
刪除一行數(shù)據(jù)(刪除學(xué)生表中的一行數(shù)據(jù))
修改一條數(shù)據(jù)(將學(xué)生表中的一條數(shù)據(jù)修改)
查詢某一條數(shù)據(jù)(查詢成績表中學(xué)號為0005的同學(xué)的成績)
實(shí)驗(yàn)總結(jié):
本次實(shí)驗(yàn)通過使用C#連接數(shù)據(jù)庫MySQL,并且使用控件dataGridView控件顯示表中的數(shù)據(jù),實(shí)現(xiàn)基本的增刪改查等數(shù)據(jù)庫操作,在本次實(shí)驗(yàn)連接數(shù)據(jù)庫操作的過程中出現(xiàn)vs2022無法添加MySQL數(shù)據(jù)庫的問題,最后在網(wǎng)上找到解決方案,添加數(shù)據(jù)庫成功,在進(jìn)行數(shù)據(jù)的增刪改查的操作時(shí),也出現(xiàn)了數(shù)據(jù)庫的報(bào)錯(cuò),無法執(zhí)行操作,導(dǎo)致無法呈現(xiàn)正確的結(jié)果,在經(jīng)過一番代碼的修改,調(diào)式后終于正常顯示結(jié)果。
總結(jié)
到此這篇關(guān)于VS2022連接數(shù)據(jù)庫MySQL并進(jìn)行基本的表的操作指南的文章就介紹到這了,更多相關(guān)VS2022連接MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解如何通過Mysql的二進(jìn)制日志恢復(fù)數(shù)據(jù)庫數(shù)據(jù)
本篇文章主要介紹了詳解如何通過Mysql的二進(jìn)制日志恢復(fù)數(shù)據(jù)庫數(shù)據(jù),具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04MySQL Version確認(rèn)問題(版本確認(rèn))
這篇文章主要介紹了MySQL Version確認(rèn)問題(版本確認(rèn)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12MySQL數(shù)據(jù)庫卸載以及刪除所有有關(guān)信息詳細(xì)步驟
在MySQL中數(shù)據(jù)刪除操作不僅僅是簡單地將某一個(gè)或多個(gè)行刪除,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫卸載以及刪除所有有關(guān)信息的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06利用mysql的inet_aton()和inet_ntoa()函數(shù)存儲(chǔ)IP地址的方法分享
當(dāng)前很多應(yīng)用都適用字符串char(15)來存儲(chǔ)IP地址(占用16個(gè)字節(jié)),利用inet_aton()和inet_ntoa()函數(shù),來存儲(chǔ)IP地址效率很高,適用unsigned int 就可以滿足需求,不需要使用bigint,只需要4個(gè)字節(jié),節(jié)省存儲(chǔ)空間,同時(shí)效率也高很多2012-03-03