stackoverflow社区!再一次,我来这里寻求你的帮助......
我的问题是:我已经创建了一个c#应用程序,用于在Byethost(SecureSignup)托管的MySQL数据库中注册帐户。即使没有条件改变,连接仍然有效,但不是所有时间。 一分钟我可以提交查询,PhpMyAdmin将其显示为在数据库中写入,但几分钟后,当我尝试完全相同的事情时,我得到各种超时错误,范围从“无法读取传输连接中的数据:A连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应。“到“超时IO操作”......这是我的代码,也许有它可以帮助你理解为什么它不时有这么奇怪的行为,因为我肯定不能。
(我已从cpanel授予我的IP远程MySQL访问权限,登录数据100%正确)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace Main
{
public partial class Form1 : Form
{
string connString;
MySqlDataReader reader;
MySqlConnection conn;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
connString = "Server=sql.byethost46.org;Port=3306;Database=bleachon_aza;UID=bleachon;password=********";
conn = new MySqlConnection(connString);
MySqlCommand command = conn.CreateCommand();
command.CommandText = "INSERT into users (Username,password) VALUES('" + usr.Text + "','" + pass.Text + "')";
conn.Open();
int timeoutvalue = conn.ConnectionTimeout;
command.ExecuteNonQuery();
MessageBox.Show(timeoutvalue.ToString()); //This was a curiousity, it displays 15
conn.Close();
}
}
}
答案 0 :(得分:1)
您应该使用parameters
来阻止SQL injection.
还可以使用using
语句正确处理MySQL
个对象。
private void button1_Click(object sender, EventArgs e)
{
connString = "Server=sql.byethost46.org;Port=3306;Database=bleachon_aza;UID=bleachon;password=********";
using (conn = new MySqlConnection(connString))
{
string query = "INSERT INTO users (Username, password) VALUES (@usr, @pass)";
// are you sure your column name is Username and not username ?
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(conn, query))
{
cmd.Parameters.AddWithValue("@usr", usr.Text);
cmd.Parameters.AddWithValue("@pass", pass.Text);
cmd.ExecuteNonQuery();
// No need to close your connection. The using statement will do that for you.
}
}
}
关于连接问题,我认为您应该联系您的主机以获得答案。我一直使用MySql
使用C#
,没有任何问题,所以我认为这是您托管的问题。