我是 MemSQL 数据库的新手,我已经在 Linux Redhat V6 上安装了 MemSQL 数据库服务器。我还创建了一个名为“Test”的测试数据库,用户名是:root 密码是:root 我可以在本地连接到这个数据库,我也知道我可以使用 MySQL 提供程序从 Windows 连接到 MemSQL 数据库。II 尝试从 Windows 连接到 MemSQL,但出现错误(连接失败:驱动程序在“读取初始通信数据包”时丢失与 MySQL 服务器的连接)。我的问题是:是否可以从 Windows 连接到 MemSQL 数据库?如果是,我该如何使用 C# 来做到这一点(我应该使用什么提供程序、配置等)。谢谢你
问问题
3125 次
1 回答
2
这看起来更像是网络/防火墙问题。最简单的检查方法是禁用客户端和服务器上的防火墙,看看是否一切正常。
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);
}
}
}
}
于 2015-06-07T22:42:21.877 回答