【问题标题】:How do I access MySql database in C#.NET with WPF?如何使用 WPF 在 C#.NET 中访问 MySql 数据库?
【发布时间】:2017-04-20 21:31:18
【问题描述】:

请给我建议。我正在尝试使用 Mysql 服务器数据库在 WPF 中开发 Windows 应用程序。

我必须使用哪种方法在 Mysql 数据库上建立连接?

1) 实体框架 要么 2) ADO.NET 要么 3) 其他的

管理员计算机需要在他的计算机上安装mysql数据库,然后将mysql数据库访问到另一个(10个或更多)网络连接的客户端系统。

这里,只有管理员计算机中的一个 MySql 数据库。并且所有其他客户端机器都通过管理员的计算机 IP 地址访问 MySql 数据库。 IP连接字符串是这样的:-

 @"Data Source=10.0.0.101

另一件事是,客户要求,在客户端机器上安装.exe文件时,还必须自动安装mysql服务器数据库(即xampp或其他..)。

我该怎么做?

我已经尝试过,ADO.NET C# 而不是 EF 来连接 mysql 用于 wpf windows 应用程序。像这样:-

public void AddUserList( UserSetUp user)  
    {  

        dbConnection.Open();  
        string query = "INSERT INTO Tble_UserSetUp (FirstName, SurName, Email, PhoneNumber, UserName, Password,Computer_Name,IP_Address,CreatedBy, CreatedDate,IsActive,Function,Department) VALUES (@FirstName, @SurName, @Email, @PhoneNumber, @UserName, @Password,@Computer_Name,@IP_Address,@CreatedBy, @CreatedDate,@IsActive,@Function,@Department)";  
        MySqlCommand insertSQL = new MySqlCommand(query, (MySqlConnection)dbConnection);  
        insertSQL.Parameters.AddWithValue("@FirstName", user.FirstName);  
        insertSQL.Parameters.AddWithValue("@SurName", user.SurName);  
        insertSQL.Parameters.AddWithValue("@Email", user.Email);  
        insertSQL.Parameters.AddWithValue("@PhoneNumber", user.PhoneNumber);  
        insertSQL.Parameters.AddWithValue("@UserName", Encrypt(user.UserName));  
        insertSQL.Parameters.AddWithValue("@Password", Encrypt(user.Password));  
        insertSQL.Parameters.AddWithValue("@Computer_Name", user.Computer_Name);  
        insertSQL.Parameters.AddWithValue("@IP_Address", user.IP_Address);  
        insertSQL.Parameters.AddWithValue("@CreatedBy", user.CreatedBy);  
        insertSQL.Parameters.AddWithValue("@CreatedDate", user.CreatedDate);  
        insertSQL.Parameters.AddWithValue("@IsActive", user.IsActive);  
        insertSQL.Parameters.AddWithValue("@Function", user.Function);  
        insertSQL.Parameters.AddWithValue("@Department", user.Department);  
        try  
        {  
            insertSQL.ExecuteNonQuery();  
            dbConnection.Close();  
        }  
        catch (Exception ex)  
        {  
            throw new Exception(ex.Message);  
        }  
    }  

使用实体框架或其他框架是个坏主意吗?

【问题讨论】:

  • 您可以通过设置先决条件来安装 MySQL,请参阅 social.msdn.microsoft.com/Forums/windows/en-US/… 以获取相同的信息。
  • EF 使用 ADO.NET。 WPF 与数据访问无关。也没有坏掉。与其尝试随机的事情,不如先决定是否需要 ORM。 PS。关于 MySQL 和 ADO.NET 有 LOT 重复的问题
  • 顺便说一句,实际问题是什么?事实上,这段文字可以总结为“如何在 .NET 中访问数据库?”
  • @PanagiotisKanavos:你的意思是写这样的代码的 ADO.NET 是从 mysql 向 wpf 应用程序插入和获取数据的唯一方法吗?如果是我打算为 Windows 应用程序遵循这种 ADO.NET 代码样式。这是个好主意吗?
  • @PanagiotisKanavos:我更改了我的问题标签。谢谢你的建议。

标签: c# mysql entity-framework ado.net


【解决方案1】:
public partial class MainWindow : Window
{
    /*mysql
     * 
     * 1. add nuget mysql.data.dll(desktop application)
     * 2. using MySql.Data.MySqlClient;
     * 3. code like bellow , you can try 
     */
    private StringBuilder sb = new StringBuilder();
    public MainWindow()
    {
        InitializeComponent();
        mysql();
        tbx.Text = sb.ToString();
    }
    private void mysql()
    {
        try
        {
            var connstr = "Server=localhost;Uid=root;Pwd=123456;database=world";
            using (var conn = new MySqlConnection(connstr))
            {
                conn.Open();

                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from city where countryCode= @ID";
                    cmd.Parameters.AddWithValue("@ID", "100");
                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var ii = reader.FieldCount;
                            for (int i = 0; i < ii; i++)
                            {
                                if (reader[i] is DBNull)
                                    sb.AppendLine("null");
                                else
                                    sb.AppendLine(reader[i].ToString());
                            }

                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
}

【讨论】:

  • 您好,先生,我会照您说的。另一件事是,客户要求在客户端机器上安装.exe文件时,还必须自动安装mysql服务器数据库(即xampp或其他等)。我该怎么做?
  • @johnsonANDjohnson 你的意思是,你在你的客户端机器上安装了 mysql 服务器?通常我们在服务器机器上安装mysql服务器,并将服务器IP应用到connstr
  • 不,先生,我的意思是在服务器机器上安装 mysql。但是客户在为服务器机器安装.exe windows应用程序时希望在服务器机器上自动安装mysql(有两个窗口应用程序,一个用于客户端机器,另一个用于服务器机器)。我怎样才能做到这一点?或者我在想,不使用mysql,而是使用sqllite.s3db。是好方法吗?请回复建议我先生
  • @johnsonANDjohnson Sqlite 仅供本地使用,不支持通过网络从其他计算机访问。据我所知,您必须在客户端的服务器中安装 mysql 并配置 mysql 服务器。
  • 先生管理系统和客户端系统都是网络连接的。那么,我可以使用 sqllite.s3db 吗?因为客户要求我,他们希望在管理系统上有一个 .exe 文件,但 mysql 服务器(xampp 或另一个)应该同时自动安装。我怎样才能做到这一点 ?请帮帮我。
猜你喜欢
  • 2015-05-15
  • 2011-07-23
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多