通过C#连接到mysql数据库
在c#中,对mysql的操作需要引入命名空间
using System.Data;
using System.Data.SqlClient;
想要登录到响应数据库,我们需要创建一个字符串,用来设置登录信息。
string connStr = @"server=.;database=****;uid=sa;pwd=****";
在这个登陆字符串中,需要填入四个内容,第一个server表示服务器的位置,如果填写server=. 则表示数据库在本地(local),也可以直接填写server=local,二者等效,如果需要访问的数据库是远程数据库,则这个地方需要填写远程数据库所在的ip地址以及相关的端口号;
第二个参数是database=****,其中的*号需要替换成你所要访问的数据库名称;
第三个参数uid=sa,表示用户名是sa——系统管理员;
第四个参数是pwd=****,表示用户名所对应的密码。
在设置完登陆字符串之后,我们就需要创建数据库连接对象。
SqlConnection conn = new SqlConnection();
这里我们就创建了一个数据库连接对象,如果我们想要连接对应我们刚刚创建的登陆字符串的数据库,需要实现下面的代码:
conn.ConnectionString = connStr;
conn.Open();
运行代码,如果程序没有抛出异常,则表示已经成功连接到对应的数据库;如果在登陆字符串中输入了不正确的信息(例如用户名不存在、数据库名不存在或者是密码错误等),则程序都会抛出异常。
如果我们需要暂时断开与数据库的连接,我们可以使用如下两种手段:
conn.Close(); // 暂时断开与数据库的连接,如果想要重新连接可以调用conn.Open()方法
conn.Dispose(); // 释放与数据库的连接,无法直接通过调用conn.Open()方法恢复连接,只能重新设置登录字符串。
向数据库中插入数据
插入数据依然使用命令字符串来完成操作,其格式如下:
string sql = "insert into UserInfos (UserName, UserPwd) values ('aaa', '111')";
SqlCommand cmd = new SqlCommand(sql, conn); // 使conn的连接对象执行sql命令
conn.Open(); // 打开连接
int count = cmd.ExecuteNonQuery(); // 执行语句,返回值是数据库操作影响到的行数
从数据库中删除数据
所有的操作都和前面的插入数据类似,差别仅在于命令字符串:
string delsql = "delete from UserInfos where UserName='aaa'";
更新数据库中的数据
string updatesql = "update UserInfos set UserPwd='222' where UserName='aaa'";
查询数据
我们使用ExecuteScalar方法来进行查询,该方法返回查询结果中的第一行第一列的值,忽略其他行或列的值。
object o = null;
string sql = "select * from UserInfoData";
SqlCommand cmd = new SqlCommand(sql, conn);
o = cmd.ExecuteScalar();
Console.WriteLine(o.ToString());
值得注意的是这种方法只能返回查询结果第一行第一列的值,应用场合一般在查询表有多少行,或者满足条件的有多少之类的只有一个返回值的场合,例如查询所有行数:
select count(1) from UserInfoData
还可以用在一种特殊的情况下,例如想要向数据表中插入一个新的实体,插入完毕之后需要返回这个实体的主键,此时可以将命令字符串设置为:
insert into UserInfoData (UserName) values ('ccc');select @@identity
读取小批量数据
使用ExecuteReader()方法来读取小批量的数据
reader = cmd.ExecuteReader();
该方法返回一个SqlDataReader对象,这是一个用来一条一条读取搜索结果的对象,通过调用reader.Read()方法来读取一条检索结果,如果检索结果为空,则该方法返回false,如果检索结果不为空,则返回true。通过这一特点,可以判断是否检索到结果。
reader.Read();
如果想要读取检索结果的内容,则通过以下方式:
reader["UserName"].ToString();
调用方式与字典类似,使用上面的语句可以得到检索结果中第一行的UserName列的值。如果想要得到下一行的值,则需要再次调用reader.Read()方法。也就是说,这个reader对象每次只存储了一行的检索信息,使用这种方法进行检索时,只能向下一条遍历,而不能回到上一条结果,每次调用Read()方法的时候都会向下一条检索。当检索到最后一条记录的时候,该方法返回false。
特别地,读取过程需要始终保持程序连接数据库处于open状态。读取完数据之后,需要使用reader.close()方法关闭。