我正在尝试将我的MySQL
数据库与C#
连接,但是没有建立连接。
我正在使用
static string connstring = @"server=my.live.ip;userid=user;password=123;database=db_name;port=3306";
但我还是得到
使用方法'mysql_native_password'为用户'user'托管'my.live.ip'的身份验证失败,并显示以下消息:用户'user'@'202.xxx.xxx.xxx'的访问被拒绝(使用密码:NO) `
我已经搜索过,但是没有找到合适的解决方案。
P.S::我正在使用的live IP
是azure
。即MySQL
数据库通过xampp
任何帮助将不胜感激
答案 0 :(得分:1)
(using password: NO)
说没有提供密码。我对C#的连接语法不熟悉,但是我怀疑
static string connstring =
@"server=my.live.ip;userid=user;password=123;database=db_name;port=3306";
或者也许没有使用connstring
。
还要检查MySQL方面。根据您使用SHOW GRANTS FOR 'user'@'202%'
还是SHOW GRANTS FOR 'user'@'202.xxx.xxx.xxx'
作为“主机”,执行'202%'
或'202.xxx.xxx.xxx'
。
您应该找回类似的东西
GRANT ... ON dbname.* TO 'user'@'202%' WITH AUTHENTICATION 'mysql_native_password';
注意:将主机名与IP地址相对应可能是个问题。
答案 1 :(得分:1)
可能要尝试的事情-
例如,如果您的密码是my> Pass,则连接字符串应如下所示。
static string connstring = @"server=servername;userid=user;password=my>Pass;database=db_name;port=3306";
如果您想探索,这里是full list。
答案 2 :(得分:0)
using System;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace AzureMySqlExample
{
class MySqlCreate
{
static async Task Main(string[] args)
{
var builder = new MySqlConnectionStringBuilder
{
Server = "YOUR-SERVER.mysql.database.azure.com",
Database = "YOUR-DATABASE",
UserID = "USER@YOUR-SERVER",
Password = "PASSWORD",
SslMode = MySqlSslMode.Required,
};
using (var conn = new MySqlConnection(builder.ConnectionString))
{
Console.WriteLine("Opening connection");
await conn.OpenAsync();
using (var command = conn.CreateCommand())
{
command.CommandText = "DROP TABLE IF EXISTS inventory;";
await command.ExecuteNonQueryAsync();
Console.WriteLine("Finished dropping table (if existed)");
command.CommandText = "CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);";
await command.ExecuteNonQueryAsync();
Console.WriteLine("Finished creating table");
command.CommandText = @"INSERT INTO inventory (name, quantity) VALUES (@name1, @quantity1),
(@name2, @quantity2), (@name3, @quantity3);";
command.Parameters.AddWithValue("@name1", "banana");
command.Parameters.AddWithValue("@quantity1", 150);
command.Parameters.AddWithValue("@name2", "orange");
command.Parameters.AddWithValue("@quantity2", 154);
command.Parameters.AddWithValue("@name3", "apple");
command.Parameters.AddWithValue("@quantity3", 100);
int rowCount = await command.ExecuteNonQueryAsync();
Console.WriteLine(String.Format("Number of rows inserted={0}", rowCount));
}
// connection will be closed by the 'using' block
Console.WriteLine("Closing connection");
}
Console.WriteLine("Press RETURN to exit");
Console.ReadLine();
}
}
}
答案 3 :(得分:0)
您可以直接查找,但是无论如何我还是找到了以下代码:
将所有端口号用户名和密码数据库名称以及服务器ip替换为所需的内容。
代码:
using System;
using System.Windows;
using MySql.Data.MySqlClient;
namespace Deportes_WPF
{
public partial class Login : Window
{
private MySqlConnection connection;
private string server;
private string database;
private string user;
private string password;
private string port;
private string connectionString;
private string sslM;
public Login()
{
InitializeComponent();
server = "server_name";
database = "database_name";
user = "user_id";
password = "password";
port = "3306";
sslM = "none";
connectionString = String.Format("server={0};port={1};user id={2}; password={3}; database={4}; SslMode={5}", server, port, user, password, database, sslM);
connection = new MySqlConnection(connectionString);
}
private void conexion()
{
try
{
connection.Open();
MessageBox.Show("successful connection");
connection.Close();
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message + connectionString);
}
}
private void btn1_Click(object sender, RoutedEventArgs e)
{
conexion();
}
}
}
我希望这段代码对您有用。
对于您给我的错误,用户名或密码也无效。
答案 4 :(得分:0)
尝试一下:
const string connStr = "Server=my.live.ip; User=user; Database=db_name; Password=123; port=3306;
Allow Zero Datetime=true; Convert Zero Datetime=true;";
希望这会有所帮助。
答案 5 :(得分:0)
using System;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace AzureMySqlExample
{
class MySqlCreate
{
static async Task Main(string[] args)
{
var builder = new MySqlConnectionStringBuilder
{
Server = "YOUR-SERVER.mysql.database.azure.com",
Database = "YOUR-DATABASE",
UserID = "USER@YOUR-SERVER",
Password = "PASSWORD",
SslMode = MySqlSslMode.Required,
};
using (var conn = new MySqlConnection(builder.ConnectionString))
{
Console.WriteLine("Opening connection");
await conn.OpenAsync();
using (var command = conn.CreateCommand())
{
command.CommandText = "DROP TABLE IF EXISTS inventory;";
await command.ExecuteNonQueryAsync();
Console.WriteLine("Finished dropping table (if existed)");
command.CommandText = "CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);";
await command.ExecuteNonQueryAsync();
Console.WriteLine("Finished creating table");
command.CommandText = @"INSERT INTO inventory (name, quantity) VALUES (@name1, @quantity1),
(@name2, @quantity2), (@name3, @quantity3);";
command.Parameters.AddWithValue("@name1", "banana");
command.Parameters.AddWithValue("@quantity1", 150);
command.Parameters.AddWithValue("@name2", "orange");
command.Parameters.AddWithValue("@quantity2", 154);
command.Parameters.AddWithValue("@name3", "apple");
command.Parameters.AddWithValue("@quantity3", 100);
int rowCount = await command.ExecuteNonQueryAsync();
Console.WriteLine(String.Format("Number of rows inserted={0}", rowCount));
}
// connection will be closed by the 'using' block
Console.WriteLine("Closing connection");
}
Console.WriteLine("Press RETURN to exit");
Console.ReadLine();
}
}
}
您可以参考下面的链接,使用c#创建和访问mysql数据库。 https://docs.microsoft.com/en-us/azure/mysql/connect-csharp
答案 6 :(得分:0)
您的密码是否以ini
或类似字符开头,并且存储在诸如null
这样的配置文件中?
由于某些配置类型将某些特殊字符视为注释或其他字符,因此密码变为password=#strongP
。
要进行验证,请将密码更改为字母数字一次并进行测试。我像my $text_repl = '| (';
foreach my $x (@lc_words) {
my $v = quotemeta $x->{word};
$v = '\b' . $v if $v =~ /^\w/;
$v .= '\b' if $v =~ /\w$/;
$text_repl .= "|$v";
}
$text_repl .= ')';