我用vs2013打包一个winForm窗体程序,程序用到了MySQL数据库

时间:2022-09-19 12:27:05
我有个疑问,在没有安装MySQL的计算机上要运行这个程序,需要安装MySQL数据库吗?还有一个问题就是有没有什么打包方法能使使程序在未安装MySQL的电脑上也能运行?

7 个解决方案

#1


不清楚,mysql好像不可以

#2


需要安装MySQL数据库

不过你可以将 MySQL 绿色版和你的程序一起打包
在程序里用 dos 命令启停 MySQL 服务,如:
#启动
start /B "Mysql" "\AMP\mysql\bin\mysqld.exe" --defaults-file="\AMP\mysql\my.ini"
#关闭
tskill mysqld 

#3


如果是连远程数据库。那一个吗mysql的dll就好了。

如果是用本地的mysql  必须装mysql。 不想装可以用sqlite。

#4


引用 3 楼 wawd74520 的回复:
如果是连远程数据库。那一个吗mysql的dll就好了。

如果是用本地的mysql  必须装mysql。 不想装可以用sqlite。

说得很对,不过我没试过连远程数据库,能贴出几条关键代码不?虽然大家都知道底层是socket传来传去。。。。。

#5



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

namespace dddd
{
    /// <summary>
    /// MySqlHelper操作类
    /// </summary>
    public sealed partial class MySqlHelper
    {
        /// <summary>
        /// 批量操作每批次记录数
        /// </summary>
        public static int BatchSize = 2000;

        /// <summary>
        /// 超时时间
        /// </summary>
        public static int CommandTimeOut = 600;

        /// <summary>
        ///初始化MySqlHelper实例
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        public MySqlHelper(string connectionString)
        {
            this.ConnectionString = connectionString;
        }

        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public string ConnectionString { get; set; }

        #region 实例方法

        #region ExecuteNonQuery

        /// <summary>
        /// 执行SQL语句,返回影响的行数
        /// </summary>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回影响的行数</returns>
        public int ExecuteNonQuery(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteNonQuery(ConnectionString, CommandType.Text, commandText, parms);
        }

        /// <summary>
        /// 执行SQL语句,返回影响的行数
        /// </summary>
        /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
        /// <param name="commandText">SQL语句或存储过程名称</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回影响的行数</returns>
        public int ExecuteNonQuery(CommandType commandType, string commandText, params MySqlParameter[] parms)
        {
            return ExecuteNonQuery(ConnectionString, commandType, commandText, parms);
        }

        #endregion ExecuteNonQuery

        #region ExecuteScalar

        /// <summary>
        /// 执行SQL语句,返回结果集中的第一行第一列
        /// </summary>
        /// <typeparam name="T">返回对象类型</typeparam>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回结果集中的第一行第一列</returns>
        public T ExecuteScalar<T>(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteScalar<T>(ConnectionString, commandText, parms);
        }

        /// <summary>
        /// 执行SQL语句,返回结果集中的第一行第一列
        /// </summary>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回结果集中的第一行第一列</returns>
        public object ExecuteScalar(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteScalar(ConnectionString, CommandType.Text, commandText, parms);
        }

        /// <summary>
        /// 执行SQL语句,返回结果集中的第一行第一列
        /// </summary>
        /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
        /// <param name="commandText">SQL语句或存储过程名称</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回结果集中的第一行第一列</returns>
        public object ExecuteScalar(CommandType commandType, string commandText, params MySqlParameter[] parms)
        {
            return ExecuteScalar(ConnectionString, commandType, commandText, parms);
        }

        #endregion ExecuteScalar

        #region ExecuteDataReader

        /// <summary>
        /// 执行SQL语句,返回只读数据集
        /// </summary>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回只读数据集</returns>
        private MySqlDataReader ExecuteDataReader(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteDataReader(ConnectionString, CommandType.Text, commandText, parms);
        }

      
    }
}



MySqlHelper msq = null;
msq = new MySqlHelper("server=123.123.123.123;database=datadb;uid=用户名(远程的话不建议用root);pwd=pass;Charset=utf8");


mysqlhelper的代码太长。 你自己去下一个。另外还要下一个MySql.Data.dll

#6


直连数据库的话要考虑这几点。
1.用户名的权限问题。 自己要管理好。 
2.长时间没操作或首次连接  都很慢。注意做异步操作
3.不建议直连。除非是局域网。
ps:mysqlhelper 类没贴完。 自己去找个吧。

#7


谢谢大家的回复,我用SQLite替代mysql一起打包就搞定了 我用vs2013打包一个winForm窗体程序,程序用到了MySQL数据库

#1


不清楚,mysql好像不可以

#2


需要安装MySQL数据库

不过你可以将 MySQL 绿色版和你的程序一起打包
在程序里用 dos 命令启停 MySQL 服务,如:
#启动
start /B "Mysql" "\AMP\mysql\bin\mysqld.exe" --defaults-file="\AMP\mysql\my.ini"
#关闭
tskill mysqld 

#3


如果是连远程数据库。那一个吗mysql的dll就好了。

如果是用本地的mysql  必须装mysql。 不想装可以用sqlite。

#4


引用 3 楼 wawd74520 的回复:
如果是连远程数据库。那一个吗mysql的dll就好了。

如果是用本地的mysql  必须装mysql。 不想装可以用sqlite。

说得很对,不过我没试过连远程数据库,能贴出几条关键代码不?虽然大家都知道底层是socket传来传去。。。。。

#5



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

namespace dddd
{
    /// <summary>
    /// MySqlHelper操作类
    /// </summary>
    public sealed partial class MySqlHelper
    {
        /// <summary>
        /// 批量操作每批次记录数
        /// </summary>
        public static int BatchSize = 2000;

        /// <summary>
        /// 超时时间
        /// </summary>
        public static int CommandTimeOut = 600;

        /// <summary>
        ///初始化MySqlHelper实例
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        public MySqlHelper(string connectionString)
        {
            this.ConnectionString = connectionString;
        }

        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public string ConnectionString { get; set; }

        #region 实例方法

        #region ExecuteNonQuery

        /// <summary>
        /// 执行SQL语句,返回影响的行数
        /// </summary>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回影响的行数</returns>
        public int ExecuteNonQuery(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteNonQuery(ConnectionString, CommandType.Text, commandText, parms);
        }

        /// <summary>
        /// 执行SQL语句,返回影响的行数
        /// </summary>
        /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
        /// <param name="commandText">SQL语句或存储过程名称</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回影响的行数</returns>
        public int ExecuteNonQuery(CommandType commandType, string commandText, params MySqlParameter[] parms)
        {
            return ExecuteNonQuery(ConnectionString, commandType, commandText, parms);
        }

        #endregion ExecuteNonQuery

        #region ExecuteScalar

        /// <summary>
        /// 执行SQL语句,返回结果集中的第一行第一列
        /// </summary>
        /// <typeparam name="T">返回对象类型</typeparam>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回结果集中的第一行第一列</returns>
        public T ExecuteScalar<T>(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteScalar<T>(ConnectionString, commandText, parms);
        }

        /// <summary>
        /// 执行SQL语句,返回结果集中的第一行第一列
        /// </summary>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回结果集中的第一行第一列</returns>
        public object ExecuteScalar(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteScalar(ConnectionString, CommandType.Text, commandText, parms);
        }

        /// <summary>
        /// 执行SQL语句,返回结果集中的第一行第一列
        /// </summary>
        /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
        /// <param name="commandText">SQL语句或存储过程名称</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回结果集中的第一行第一列</returns>
        public object ExecuteScalar(CommandType commandType, string commandText, params MySqlParameter[] parms)
        {
            return ExecuteScalar(ConnectionString, commandType, commandText, parms);
        }

        #endregion ExecuteScalar

        #region ExecuteDataReader

        /// <summary>
        /// 执行SQL语句,返回只读数据集
        /// </summary>
        /// <param name="commandText">SQL语句</param>
        /// <param name="parms">查询参数</param>
        /// <returns>返回只读数据集</returns>
        private MySqlDataReader ExecuteDataReader(string commandText, params MySqlParameter[] parms)
        {
            return ExecuteDataReader(ConnectionString, CommandType.Text, commandText, parms);
        }

      
    }
}



MySqlHelper msq = null;
msq = new MySqlHelper("server=123.123.123.123;database=datadb;uid=用户名(远程的话不建议用root);pwd=pass;Charset=utf8");


mysqlhelper的代码太长。 你自己去下一个。另外还要下一个MySql.Data.dll

#6


直连数据库的话要考虑这几点。
1.用户名的权限问题。 自己要管理好。 
2.长时间没操作或首次连接  都很慢。注意做异步操作
3.不建议直连。除非是局域网。
ps:mysqlhelper 类没贴完。 自己去找个吧。

#7


谢谢大家的回复,我用SQLite替代mysql一起打包就搞定了 我用vs2013打包一个winForm窗体程序,程序用到了MySQL数据库