【问题标题】:Connect To MemSQL from C#从 C# 连接到 MemSQL
【发布时间】:2014-08-17 08:24:35
【问题描述】:

我是 MemSQL 数据库的新手,我已经在 Linux Redhat V6 上安装了 MemSQL 数据库服务器。 我还创建了一个名为“Test”的测试数据库,用户名是:root,密码是:root 我可以在本地连接到这个数据库,我也知道我可以使用 ODBC 的 MySQL 提供程序从 Windows 连接到 MemSQL 数据库。我尝试从 Windows 连接到 MemSQL,但出现错误(连接失败:驱动程序在“读取初始通信数据包”时与 MySQL 服务器失去连接)。 我的问题是:是否可以从 Windows 连接到 MemSQL 数据库?如果是,我如何使用 C# 来做到这一点(我应该使用什么提供程序,配置,...等)。 谢谢你

【问题讨论】:

    标签: c# mysql database ado.net singlestore


    【解决方案1】:

    这看起来更像是网络/防火墙问题。最简单的检查方法是禁用客户端和服务器上的防火墙以查看是否一切正常。

    MemSQL 仅使用 MySQL 兼容性,因此官方 MySQL C# 客户端可以正常工作。您可以从 nuget 安装它:https://www.nuget.org/packages/MySql.Data/

    PM> Install-Package MySql.Data
    

    这是 MemSQL 文档中用于测试插入的快速示例:

    http://docs.memsql.com/latest/concepts/multi_insert_examples/#c

    using System;
    using System.Data;
    using System.Threading;
    using System.Diagnostics;
    using MySql.Data.MySqlClient;
    
    namespace MemSQLTest {
      //Thread creates a connection and inserts for 1000 milliseconds
      public class WorkerThread {
        public static void Thread() {
          try {
            IDbConnection conn;
            conn = new MySql.Data.MySqlClient.MySqlConnection();
            conn.ConnectionString = "Server=127.0.0.1;Uid=root;Pwd=;";
            conn.Open();
    
            IDbCommand dbcmd = conn.CreateCommand();
            dbcmd.CommandText = "USE db";
            dbcmd.ExecuteNonQuery();
            dbcmd.CommandText = "INSERT INTO t VALUES (DEFAULT)";
            Stopwatch stop = new Stopwatch();
            stop.Start();
            while(stop.ElapsedMilliseconds < 1000)
            {
              dbcmd.ExecuteNonQuery();
            }
          } catch (Exception ex) {
              Console.WriteLine(ex.Message);
          }
        }
      }
      class MemSQLTest {
        static void Main(string[] args) {
          try {
            IDbConnection conn;
            conn = new MySql.Data.MySqlClient.MySqlConnection();
            conn.ConnectionString = "Server=127.0.0.1;Uid=root;Pwd=;";
            conn.Open();
    
            //Initialize database with auto increment table
            IDbCommand dbcmd = conn.CreateCommand();
            dbcmd.CommandText = "DROP DATABASE IF EXISTS db";
            dbcmd.ExecuteNonQuery();
            dbcmd.CommandText = "CREATE DATABASE db";
            dbcmd.ExecuteNonQuery();
            dbcmd.CommandText = "USE db";
            dbcmd.ExecuteNonQuery();
            dbcmd.CommandText = "CREATE TABLE t (id int primary key auto_increment)";
            dbcmd.ExecuteNonQuery();
            //Initialize threads
            Thread[] threads = new Thread[10];
            for(int i = 0; i < 10; i++)
            {
              threads[i] = new Thread(new ThreadStart(WorkerThread.Thread));
              threads[i].Start();
            }
            for(int i = 0; i < 10; i++)
            {
              threads[i].Join();
            }
            //Show select count(*) on auto increment table
            dbcmd.CommandText = "SELECT COUNT(*) FROM t";
            IDataReader reader = dbcmd.ExecuteReader();
            while(reader.Read()) {
              Console.WriteLine(reader["COUNT(*)"]);
            }
          } catch (Exception ex) {
            Console.WriteLine(ex.Message);
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多