[C#基础]c#连接mysql

sql基础:http://www.w3school.com.cn/sql/index.asp


一、DataTable & DataSet

1.DataTable:表示内存中的一个数据表

2.DataSet:表示内存中的一个数据缓存,可以看作为DataTable的集合(字典)

// Put the next line into the Declarations section.
private System.Data.DataSet dataSet;

private void MakeDataTables()
{
    // Run all of the functions. 
    MakeParentTable();
    MakeChildTable();
    MakeDataRelation();
    BindToDataGrid();
}

private void MakeParentTable()
{
    // Create a new DataTable.
    System.Data.DataTable table = new DataTable("ParentTable");
    // Declare variables for DataColumn and DataRow objects.
    DataColumn column;
    DataRow row;

    // Create new DataColumn, set DataType, 
    // ColumnName and add to DataTable.    
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    column.ReadOnly = true;
    column.Unique = true;
    // Add the Column to the DataColumnCollection.
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "ParentItem";
    column.AutoIncrement = false;
    column.Caption = "ParentItem";
    column.ReadOnly = false;
    column.Unique = false;
    // Add the column to the table.
    table.Columns.Add(column);

    // Make the ID column the primary key column.
    DataColumn[] PrimaryKeyColumns = new DataColumn[1];
    PrimaryKeyColumns[0] = table.Columns["id"];
    table.PrimaryKey = PrimaryKeyColumns;

    // Instantiate the DataSet variable.
    dataSet = new DataSet();
    // Add the new DataTable to the DataSet.
    dataSet.Tables.Add(table);

    // Create three new DataRow objects and add 
    // them to the DataTable
    for (int i = 0; i<= 2; i++)
    {
        row = table.NewRow();
        row["id"] = i;
        row["ParentItem"] = "ParentItem " + i;
        table.Rows.Add(row);
    }
}

private void MakeChildTable()
{
    // Create a new DataTable.
    DataTable table = new DataTable("childTable");
    DataColumn column;
    DataRow row;

    // Create first column and add to the DataTable.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.Int32");
    column.ColumnName = "ChildID";
    column.AutoIncrement = true;
    column.Caption = "ID";
    column.ReadOnly = true;
    column.Unique = true;

    // Add the column to the DataColumnCollection.
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.String");
    column.ColumnName = "ChildItem";
    column.AutoIncrement = false;
    column.Caption = "ChildItem";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);

    // Create third column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.Int32");
    column.ColumnName = "ParentID";
    column.AutoIncrement = false;
    column.Caption = "ParentID";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);

    dataSet.Tables.Add(table);

    // Create three sets of DataRow objects, 
    // five rows each, and add to DataTable.
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 0 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 5;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 1 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 10;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 2 ;
        table.Rows.Add(row);
    }
}

private void MakeDataRelation()
{
    // DataRelation requires two DataColumn 
    // (parent and child) and a name.
    DataColumn parentColumn = 
        dataSet.Tables["ParentTable"].Columns["id"];
    DataColumn childColumn = 
        dataSet.Tables["ChildTable"].Columns["ParentID"];
    DataRelation relation = new 
        DataRelation("parent2Child", parentColumn, childColumn);
    dataSet.Tables["ChildTable"].ParentRelations.Add(relation);
}

private void BindToDataGrid()
{
    // Instruct the DataGrid to bind to the DataSet, with the 
    // ParentTable as the topmost DataTable.
    dataGrid1.SetDataBinding(dataSet,"ParentTable");
}

更深入的:https://msdn.microsoft.com/zh-cn/library/system.data.datatable(v=vs.110).aspx#


二、访问数据库的两种方式:

1.客户端每次访问数据库时,都会发送请求

2.将信息存储到DataSet中,对DataSet进行访问,断开与数据库的连接时发送请求。该方法可以避免频繁操作数据库,但是可能会出现数据库不同步的问题


三、c#连接mysql

1.下载MySql.Data.dll,然后在项目中添加该引用,并且使用MySql.Data.MySqlClient这个命名空间

2.

using MySql.Data.MySqlClient;
using System;
using System.Data;
using System.Text;

public class MySqlUtility {

    private static MySqlConnection mySqlConnection;
    private static DataSet dataSet;
    private static StringBuilder stringBuilder;

    /// <summary>
    /// 对于host,如果是本地的话,则写localhost
    /// 如果是局域网,则写本机的局域网IP
    /// </summary>
    /// <param name="host"></param>
    /// <param name="port"></param>
    /// <param name="database"></param>
    /// <param name="id"></param>
    /// <param name="password"></param>
    public static void Open(string host = "localhost", string port = "3306", string database = "test", string id = "hong", string password = "hong")
    {
        try
        {
            string s = string.Format("Server = {0};port = {1};Database = {2};User ID = {3};Password = {4};", host, port, database, id, password);
            mySqlConnection = new MySqlConnection(s);
            mySqlConnection.Open();
            dataSet = new DataSet();
        }
        catch(Exception e)
        {
            throw new Exception("服务器连接失败,请重新检查是否打开MySql服务。" + e.Message.ToString());
        }
      
    }

    public static void Close()
    {
        if (mySqlConnection != null)
        {
            mySqlConnection.Close();
            mySqlConnection = null;
            dataSet = null;
            stringBuilder = null;
        }   
    }

    private static void ExecuteNotReturnDataSet(string statement)
    {
        //Debug.Log(statement);
        MySqlCommand mySqlCommand = new MySqlCommand(statement, mySqlConnection);
        mySqlCommand.ExecuteNonQuery();
    }

    private static DataSet ExecuteReturnDataSet(string statement)
    {
        //Debug.Log(statement);
        MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(statement, mySqlConnection);
        mySqlDataAdapter.Fill(dataSet);
        return dataSet;
    }

    /// <summary>
    /// 插入一行中的全部数据,对于值,统一转化为字符串进行处理
    /// INSERT INTO 表名称 VALUES (值1, 值2,....)
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="values"></param>
    public static void Insert(string tableName, string[] values)
    {
        stringBuilder = new StringBuilder("insert into " + tableName + " values (" + "'" + values[0] + "'");
        for (int i = 1; i < values.Length; i++)
        {
            stringBuilder.Append("," + "'" + values[i] + "'");
        }
        stringBuilder.Append(")");

        ExecuteNotReturnDataSet(stringBuilder.ToString());
    }

    /// <summary>
    /// 插入一行中的部分数据
    /// INSERT INTO 表名称 (列1, 列2,...) VALUES (值1, 值2,....)
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="columnNames"></param>
    /// <param name="values"></param>
    public static void Insert(string tableName, string[] columnNames, string[] values)
    {
        stringBuilder = new StringBuilder("insert into " + tableName + " (" + columnNames[0]);
        for (int i = 1; i < columnNames.Length; i++)
        {
            stringBuilder.Append("," + columnNames[i]);
        }
        stringBuilder.Append(") values (" + "'" + values[0] +"'");
        for (int i = 1; i < values.Length; i++)
        {
            stringBuilder.Append("," + "'" + values[i] + "'");
        }
        stringBuilder.Append(")");

        ExecuteNotReturnDataSet(stringBuilder.ToString());
    }

    /// <summary>
    /// SELECT * FROM 表名称
    /// </summary>
    /// <param name="tableName"></param>
    /// <returns></returns>
    public static DataSet Select(string tableName)
    {
        stringBuilder = new StringBuilder("select * from " + tableName);

        return ExecuteReturnDataSet(stringBuilder.ToString());
    }

    /// <summary>
    /// SELECT 列名称 FROM 表名称
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="columnNames"></param>
    /// <returns></returns>
    public static DataSet Select(string tableName, string[] columnNames)
    {
        stringBuilder = new StringBuilder("select " + columnNames[0]);
        for (int i = 1; i < columnNames.Length; i++)
        {
            stringBuilder.Append("," + columnNames[i]);
        }
        stringBuilder.Append(" from " + tableName);

        return ExecuteReturnDataSet(stringBuilder.ToString());
    }

    /// <summary>
    /// SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="columnNames"></param>
    /// <param name="cols"></param>
    /// <param name="operations"></param>
    /// <param name="values"></param>
    /// <returns></returns>
    public static DataSet Select(string tableName, string[] columnNames, string[] cols, string[] operations, string[] values)
    {
        stringBuilder = new StringBuilder("select " + columnNames[0]);
        for (int i = 1; i < columnNames.Length; i++)
        {
            stringBuilder.Append("," + columnNames[i]);
        }

        stringBuilder.Append(" from " + tableName + " where " + cols[0] + operations[0] + "'" + values[0] + "'");
        for (int i = 1; i < cols.Length; i++)
        {
            stringBuilder.Append(" and " + cols[i] + operations[i] + "'" + values[i] + "'");
        }

        return ExecuteReturnDataSet(stringBuilder.ToString());
    }

    /// <summary>
    /// UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="columnNames"></param>
    /// <param name="newValues"></param>
    /// <param name="cols"></param>
    /// <param name="oldValues"></param>
    public static void Update(string tableName, string[] columnNames, string[] newValues, string[] cols, string[] oldValues)
    {
        stringBuilder = new StringBuilder("update " + tableName + " set " + columnNames[0] + "='" + newValues[0] +"'");
        for (int i = 1; i < columnNames.Length; i++)
        {
            stringBuilder.Append("," + columnNames[i] + "='" + newValues[i] + "'");
        }
        stringBuilder.Append(" where " + cols[0] + " ='" + oldValues[0] + "'");
        for (int i = 1; i < cols.Length; i++)
        {
            stringBuilder.Append(" and " + cols[i] + "='" + oldValues[i] + "'");
        }

        ExecuteNotReturnDataSet(stringBuilder.ToString());
    }

    /// <summary>
    /// DELETE FROM 表名称 WHERE 列名称 = 值
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="columnNames"></param>
    /// <param name="values"></param>
    public static void Delete(string tableName, string[] columnNames, string[] values)
    {
        stringBuilder = new StringBuilder("delete from " + tableName + " where " + columnNames[0] + "='" + values[0] + "'");
        for (int i = 1; i < columnNames.Length; i++)
        {
            stringBuilder.Append(" or " + columnNames[i] + "='" + values[i] + "'");
        }

        ExecuteNotReturnDataSet(stringBuilder.ToString());
    }

}



四、unity连接mysql

1.在Assets下建一个文件夹,命名为Plugins,然后放入这些dll:http://pan.baidu.com/s/1i56gDfB

2.复制上面的脚本

3.

using UnityEngine;
using System.Collections;
using System.Data;

//若出现ReflectionTypeLoadException错误,需要将Player Settings中的
//Api Compatibility Level改为.Net2.0
public class NewBehaviourScript : MonoBehaviour {

	void Start () 
    {
        MySqlUtility.Open();
        DataSet ds = MySqlUtility.Select("human", new string[] { "*" }, new string[] { "age" }, new string[] { "=" }, new string[] { "222" });
        PrintLog(ds);
        MySqlUtility.Close();
	}

    public void PrintLog(DataSet ds)
    {
        if (ds == null)
        {
            Debug.Log("DebugLog-------------DataSet is null");
            return;
        };
        DataTable dt = ds.Tables[0];
        if (dt == null)
        {
            Debug.Log("DebugLog-------------DataTable is null");
        }
        foreach (DataRow row in dt.Rows)
        {
            foreach (DataColumn column in dt.Columns)
            {
                Debug.Log(row[column]);
            }
        }
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值