C#写一套最全的MySQL帮助类(包括增删改查)
<p>介绍说明:<br>这个帮助类包含了六个主要的方法:<br>ExecuteNonQuery、ExecuteScalar、ExecuteQuery、ExecuteQuery(泛型)、Insert、Update和Delete。<br>其中,ExecuteNonQuery用于执行不返回结果集的SQL语句;<br>ExecuteScalar用于执行一个查询,并返回结果集中第一行的第一列;<br>ExecuteQuery用于执行一个查询,并返回结果集;<br>ExecuteQuery(泛型)用于执行一个查询,并将结果集映射到一个对象列表;<br>Insert用于向数据库中插入数据;<br>Update用于更新数据库中的数据;<br>Delete用于删除数据库中的数据。</p><p>一、以下是一个基于C#的MySQL帮助类的示例代码,可以用于连接数据库、执行SQL语句、读取数据等操作:</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_0c76bb81-20ce-4975-b33b-7f2e21b52ea2" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_0c76bb81-20ce-4975-b33b-7f2e21b52ea2" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_0c76bb81-20ce-4975-b33b-7f2e21b52ea2" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Collections.Generic;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Data;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> MySql.Data.MySqlClient;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MySQLHelper
{
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> connectionString;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> MySQLHelper(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> connectionString)
{
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.connectionString =<span style="color: rgba(0, 0, 0, 1)"> connectionString;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行不返回结果集的SQL语句</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> ExecuteNonQuery(<span style="color: rgba(0, 0, 255, 1)">string</span> sql, <span style="color: rgba(0, 0, 255, 1)">params</span><span style="color: rgba(0, 0, 0, 1)"> MySqlParameter[] parameters)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlConnection connection = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlConnection(connectionString))
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlCommand command = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlCommand(sql, connection))
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加参数</span>
<span style="color: rgba(0, 0, 0, 1)"> command.Parameters.AddRange(parameters);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打开连接</span>
<span style="color: rgba(0, 0, 0, 1)"> connection.Open();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行SQL语句并返回影响行数</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> command.ExecuteNonQuery();
}
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行一个查询,并返回结果集中第一行的第一列</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">object</span> ExecuteScalar(<span style="color: rgba(0, 0, 255, 1)">string</span> sql, <span style="color: rgba(0, 0, 255, 1)">params</span><span style="color: rgba(0, 0, 0, 1)"> MySqlParameter[] parameters)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlConnection connection = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlConnection(connectionString))
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlCommand command = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlCommand(sql, connection))
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加参数</span>
<span style="color: rgba(0, 0, 0, 1)"> command.Parameters.AddRange(parameters);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打开连接</span>
<span style="color: rgba(0, 0, 0, 1)"> connection.Open();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行SQL查询并返回第一行第一列的值</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> command.ExecuteScalar();
}
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行一个查询,并返回结果集</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> DataTable ExecuteQuery(<span style="color: rgba(0, 0, 255, 1)">string</span> sql, <span style="color: rgba(0, 0, 255, 1)">params</span><span style="color: rgba(0, 0, 0, 1)"> MySqlParameter[] parameters)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlConnection connection = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlConnection(connectionString))
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlCommand command = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlCommand(sql, connection))
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加参数</span>
<span style="color: rgba(0, 0, 0, 1)"> command.Parameters.AddRange(parameters);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打开连接</span>
<span style="color: rgba(0, 0, 0, 1)"> connection.Open();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建DataAdapter和DataTable对象,并填充数据</span>
<span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlDataAdapter adapter = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlDataAdapter(command))
{
DataTable dataTable </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DataTable();
adapter.Fill(dataTable);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> dataTable;
}
}
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行一个查询,并将结果集映射到一个对象列表</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> List<T> ExecuteQuery<T>(<span style="color: rgba(0, 0, 255, 1)">string</span> sql, Func<IDataRecord, T> selector, <span style="color: rgba(0, 0, 255, 1)">params</span><span style="color: rgba(0, 0, 0, 1)"> MySqlParameter[] parameters)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlConnection connection = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlConnection(connectionString))
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlCommand command = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlCommand(sql, connection))
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加参数</span>
<span style="color: rgba(0, 0, 0, 1)"> command.Parameters.AddRange(parameters);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打开连接</span>
<span style="color: rgba(0, 0, 0, 1)"> connection.Open();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建DataReader对象并读取数据,将每行数据映射到对象并添加到列表中</span>
<span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlDataReader reader =<span style="color: rgba(0, 0, 0, 1)"> command.ExecuteReader())
{
List</span><T> list = <span style="color: rgba(0, 0, 255, 1)">new</span> List<T><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (reader.Read())
{
list.Add(selector(reader));
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list;
}
}
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 向数据库中插入数据</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> Insert(<span style="color: rgba(0, 0, 255, 1)">string</span> tableName, Dictionary<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>><span style="color: rgba(0, 0, 0, 1)"> data)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span>[] columns = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">object</span>[] values = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (KeyValuePair<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>> item <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> data)
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取列名和值</span>
columns =<span style="color: rgba(0, 0, 0, 1)"> item.Key;
values </span>=<span style="color: rgba(0, 0, 0, 1)"> item.Value;
i</span>++<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">string</span> sql = <span style="color: rgba(0, 0, 255, 1)">string</span>.Format(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">INSERT INTO {0} ({1}) VALUES ({2})</span><span style="color: rgba(128, 0, 0, 1)">"</span>, tableName, <span style="color: rgba(0, 0, 255, 1)">string</span>.Join(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">"</span>, columns), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@</span><span style="color: rgba(128, 0, 0, 1)">"</span> + <span style="color: rgba(0, 0, 255, 1)">string</span>.Join(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">,@</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, columns));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将Dictionary转换为MySqlParameter数组,并执行SQL语句</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ExecuteNonQuery(sql, ToMySqlParameters(data));
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 更新数据库中的数据</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> Update(<span style="color: rgba(0, 0, 255, 1)">string</span> tableName, Dictionary<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>> data, <span style="color: rgba(0, 0, 255, 1)">string</span> whereClause = <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span>[] setValues = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (KeyValuePair<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>> item <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> data)
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取列名和值</span>
setValues = <span style="color: rgba(0, 0, 255, 1)">string</span>.Format(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{0}=@{0}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, item.Key);
i</span>++<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">string</span> sql = <span style="color: rgba(0, 0, 255, 1)">string</span>.Format(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UPDATE {0} SET {1}</span><span style="color: rgba(128, 0, 0, 1)">"</span>, tableName, <span style="color: rgba(0, 0, 255, 1)">string</span>.Join(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, setValues));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.IsNullOrEmpty(whereClause))
{
sql </span>+= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> WHERE </span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> whereClause;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将Dictionary转换为MySqlParameter数组,并执行SQL语句</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ExecuteNonQuery(sql, ToMySqlParameters(data));
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 删除数据库中的数据</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> Delete(<span style="color: rgba(0, 0, 255, 1)">string</span> tableName, <span style="color: rgba(0, 0, 255, 1)">string</span> whereClause = <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> sql = <span style="color: rgba(0, 0, 255, 1)">string</span>.Format(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DELETE FROM {0}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, tableName);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">.IsNullOrEmpty(whereClause))
{
sql </span>+= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> WHERE </span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> whereClause;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行SQL语句并返回影响</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ExecuteNonQuery(sql);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将Dictionary转换为MySqlParameter数组</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> MySqlParameter[] ToMySqlParameters(Dictionary<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>><span style="color: rgba(0, 0, 0, 1)"> data)
{
List</span><MySqlParameter> parameters = <span style="color: rgba(0, 0, 255, 1)">new</span> List<MySqlParameter><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (KeyValuePair<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>> item <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> data)
{
parameters.Add(</span><span style="color: rgba(0, 0, 255, 1)">new</span> MySqlParameter(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@</span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> item.Key, item.Value));
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> parameters.ToArray();
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>二、另外,在使用这个帮助类时,需要先创建一个连接字符串,例如</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_316d4655-1a60-4176-8975-62cb9b876cfa" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_316d4655-1a60-4176-8975-62cb9b876cfa" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_316d4655-1a60-4176-8975-62cb9b876cfa" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">string</span> connectionString = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">server=localhost;database=myDatabase;uid=myUsername;password=myPassword;</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
MySQLHelper mySQLHelper </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> MySQLHelper(connectionString);</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>三、然后就可以使用这个帮助类来访问MySQL数据库了。下面是一些示例代码:</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_71e9dc48-780e-4164-bdeb-253813045463" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_71e9dc48-780e-4164-bdeb-253813045463" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_71e9dc48-780e-4164-bdeb-253813045463" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查询所有数据</span>
DataTable dataTable = mySQLHelper.ExecuteQuery(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM myTable</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (DataRow row <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> dataTable.Rows)
{
Console.WriteLine(row[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">column1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">].ToString());
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查询单个值</span>
<span style="color: rgba(0, 0, 255, 1)">object</span> value = mySQLHelper.ExecuteScalar(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT COUNT(*) FROM myTable</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
Console.WriteLine(value.ToString());
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查询并映射到对象列表</span>
List<MyClass> list = mySQLHelper.ExecuteQuery(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM myTable</span><span style="color: rgba(128, 0, 0, 1)">"</span>, r => <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MyClass
{
Column1 </span>= r[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">column1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">].ToString(),
Column2 </span>= <span style="color: rgba(0, 0, 255, 1)">int</span>.Parse(r[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">column2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">].ToString())
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 插入数据</span>
Dictionary<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>> data = <span style="color: rgba(0, 0, 255, 1)">new</span> Dictionary<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>><span style="color: rgba(0, 0, 0, 1)">();
data.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">column1</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">value1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
data.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">column2</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 128, 1)">123</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">int</span> result = mySQLHelper.Insert(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myTable</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, data);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 更新数据</span>
Dictionary<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>> data = <span style="color: rgba(0, 0, 255, 1)">new</span> Dictionary<<span style="color: rgba(0, 0, 255, 1)">string</span>, <span style="color: rgba(0, 0, 255, 1)">object</span>><span style="color: rgba(0, 0, 0, 1)">();
data.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">column1</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">value2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
data.Add(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">column2</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 128, 1)">456</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">int</span> result = mySQLHelper.Update(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myTable</span><span style="color: rgba(128, 0, 0, 1)">"</span>, data, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">id=1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 删除数据</span>
<span style="color: rgba(0, 0, 255, 1)">int</span> result = mySQLHelper.Delete(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">myTable</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">id=1</span><span style="color: rgba(128, 0, 0, 1)">"</span>);</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> 注:这些示例代码展示了如何使用这个帮助类来执行常见的MySQL操作,例如查询、插入、更新和删除数据。请注意,在执行SQL语句时,要避免SQL注入攻击,可以使用参数化查询来确保安全。</p>
<p>四、就上述SQL注入攻击,防范例子:</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_07b1f4a8-26e2-4402-861a-6501bb72de60" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_07b1f4a8-26e2-4402-861a-6501bb72de60" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_07b1f4a8-26e2-4402-861a-6501bb72de60" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是的,使用参数化查询是避免SQL注入攻击的重要方法之一。C#中可以使用MySqlParameter类来创建参数化查询,下面简单介绍一下如何使用MySqlParameter类。
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">首先,看一个普通的SQL语句:</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> sql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM Users WHERE name='</span><span style="color: rgba(128, 0, 0, 1)">"</span> + userName + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">' AND password='</span><span style="color: rgba(128, 0, 0, 1)">"</span> + password + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这个SQL语句接收两个字符串类型的参数:userName和password。但是,如果恶意用户在输入用户名或密码时添加了SQL代码,则可能会导致SQL注入攻击。例如,如果用户输入了以下内容作为密码:</span>
a<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> OR </span><span style="color: rgba(128, 0, 0, 1)">'</span>a<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">则生成的SQL语句将变成:</span>
SELECT* FROM Users WHERE name=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">xxx</span><span style="color: rgba(128, 0, 0, 1)">'</span> AND password = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span> OR <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这个SQL语句将始终返回true,因为'a'='a'是永远成立的,所以用户可以绕过登录验证并访问数据库。
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">为了避免这种情况发生,我们可以使用MySqlParameter类来创建参数化查询。以下是一个示例:</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> sql = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM Users WHERE name=@UserName AND password=@Password</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlConnection connection = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlConnection(connectionString))
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlCommand command = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MySqlCommand(sql, connection))
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建参数</span>
command.Parameters.Add(<span style="color: rgba(0, 0, 255, 1)">new</span> MySqlParameter(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@UserName</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, userName));
command.Parameters.Add(</span><span style="color: rgba(0, 0, 255, 1)">new</span> MySqlParameter(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@Password</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, password));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打开连接并执行查询</span>
<span style="color: rgba(0, 0, 0, 1)"> connection.Open();
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (MySqlDataReader reader =<span style="color: rgba(0, 0, 0, 1)"> command.ExecuteReader())
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 处理结果集</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在这个示例中,我们使用了 @符号来标记参数名称,并使用MySqlParameter类为每个参数创建实例。这样,即使用户在输入用户名或密码时添加了SQL代码,它也不会影响生成的SQL语句。
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">总之,使用参数化查询是一个非常重要的安全措施,可以有效预防SQL注入攻击,C#提供了方便易用的MySqlParameter类来支持参数化查询。</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p><br><br>
来源:https://www.cnblogs.com/wxsdyz/p/17339519.html
頁:
[1]