c# - 从 C# 连接到 MemSQL

标签 c# mysql database ado.net singlestore

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

最佳答案

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

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);
      }
    }
  }
}

关于c# - 从 C# 连接到 MemSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431268/

相关文章:

mysql - 使用 CASE 语句进行 MySQL 查询帮助

mysql - MYSQL Spatial 使用的指标是什么?

php - 如何在 MySQL 中存储复杂的产品/订单数据?

database - 从最不依赖到最依赖对数据库表进行排序

c# - 在 C# 中,finally block 之前有一个 catch-all catch block 有什么用?

mysql - 使用动态 SQL 语句计算表中每一行的总列

c# - 除非安装了 visual studio,否则无法使用 C++/CLI DLL

mysql - 编写多个 UPDATE 查询的更有效方法

c# - Python.Net - 如何从文件 (.Py) 运行 python 脚本

c# - Web API 中的自定义 IAuthenticationFilter 和 AllowAnonymous