You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android访客登录应用MySQL连接失败求助

解决Xamarin Android访客登录应用的MySQL远程连接错误

嘿,我看到你在用Visual Studio 17开发Xamarin Android访客登录应用时,点击登录按钮出现了远程MySQL连接错误,咱们一步步来排查和解决这个问题。

首先,先看你提供的代码里几个明显的问题,再延伸到远程连接的常见坑点:

1. 代码里的直接错误

你粘贴的代码最后一行cmd.Parameters.AddWithValue("@",...);明显是未完成的,这会直接导致语法错误,必须补全缺失的参数。另外,你在OnCreateView里获取单选按钮的选中状态是不对的——这个方法是在Dialog刚创建时执行的,用户还没机会选择单选按钮,所以citizenStatus和classification大概率是空值,插入数据库时会出问题。

修正后的登录点击事件代码

我帮你补全了参数,添加了错误捕获,并且把单选按钮状态的获取移到了点击事件里:

void SignIn_Click(object sender, EventArgs e)
{
    // 先获取用户实际选择的单选按钮状态
    citizenStatus = radCitizen.Checked ? "Citizen" : "Not A Citizen";
    classification = radClassified.Checked ? "Classified" : "Unclassified";

    try
    {
        int badgeNum = new Random().Next(100000, 999999);
        DateTime dateTimeSignIn = DateTime.Now;
        // 注意添加了SslMode参数,很多免费数据库需要SSL连接
        string connectionstring = "Server=db4free.net;Port=3306;Database=mrcwebappdb;User Id=dbeditor;Password=Monster001359%;charset=utf8;SslMode=Required";
        
        // 使用using语句自动释放连接资源
        using (MySqlConnection con = new MySqlConnection(connectionstring))
        {
            con.Open();
            MySqlCommand cmd = new MySqlCommand(@"
                INSERT INTO visitormanagement(
                    visitorName,visitorBadgeNumber,visitorRepresent,
                    visitorToSee,visitorPurpose,visitorCitizenship,
                    visitorClassification,visitorSignIn
                ) VALUES(
                    @visitorName,@visitorBadgeNumber,@visitorRepresent,
                    @visitorToSee,@visitorPurpose,@visitorCitizenship,
                    @visitorClassification,@visitorSignIn
                )", con);
            
            // 补全所有参数
            cmd.Parameters.AddWithValue("@visitorName", txtName.Text);
            cmd.Parameters.AddWithValue("@visitorBadgeNumber", badgeNum.ToString());
            cmd.Parameters.AddWithValue("@visitorRepresent", txtRepresent.Text);
            cmd.Parameters.AddWithValue("@visitorToSee", txtToSee.Text);
            cmd.Parameters.AddWithValue("@visitorPurpose", txtPurpose.Text);
            cmd.Parameters.AddWithValue("@visitorCitizenship", citizenStatus);
            cmd.Parameters.AddWithValue("@visitorClassification", classification);
            // 确保日期格式和数据库的datetime字段兼容
            cmd.Parameters.AddWithValue("@visitorSignIn", dateTimeSignIn.ToString("yyyy-MM-dd HH:mm:ss"));

            int rowsAffected = cmd.ExecuteNonQuery();
            if (rowsAffected > 0)
            {
                // 数据插入成功,触发事件返回首页
                nOnSignInComplete?.Invoke(this, new OnSignInEvenArgs(
                    txtName.Text, txtRepresent.Text, txtToSee.Text, 
                    txtPurpose.Text, citizenStatus, classification));
                Dismiss(); // 关闭登录Dialog
            }
        }
    }
    catch (MySqlException ex)
    {
        // 捕获数据库相关错误,方便排查
        Toast.MakeText(Context, $"数据库错误: {ex.Message}", ToastLength.Long).Show();
    }
    catch (System.Net.WebException ex)
    {
        // 捕获网络连接错误
        Toast.MakeText(Context, $"网络连接错误: {ex.Message}", ToastLength.Long).Show();
    }
    catch (Exception ex)
    {
        // 兜底捕获其他错误
        Toast.MakeText(Context, $"未知错误: {ex.Message}", ToastLength.Long).Show();
    }
}

2. 远程MySQL连接的常见坑点

除了代码错误,远程连接数据库还有几个容易踩的坑:

  • Android应用网络权限:别忘了在AndroidManifest.xml里添加INTERNET权限,否则应用连不上任何网络:

    <uses-permission android:name="android.permission.INTERNET" />
    
  • MySQL用户远程访问权限:你的dbeditor用户可能只被允许从localhost访问,需要登录数据库执行以下SQL授权远程访问:

    GRANT ALL PRIVILEGES ON mrcwebappdb.* TO 'dbeditor'@'%' IDENTIFIED BY 'Monster001359%';
    FLUSH PRIVILEGES;
    

    这里的%表示允许从任意IP访问,如果你想限制特定IP,可以把%换成你的设备公网IP。

  • 数据库服务器防火墙/安全组:db4free.net的3306端口可能没有开放给你的设备IP,需要登录db4free的管理后台,检查安全设置,把你的设备IP加入允许列表。

  • SSL连接要求:很多免费MySQL服务强制要求SSL连接,所以我在连接字符串里加了SslMode=Required,如果还是不行,可以试试SslMode=None(但不推荐,不安全)。

按照上面的步骤调整后,应该能解决连接错误的问题,如果还有问题,看看Toast弹出的错误信息,能更精准地定位问题。

内容的提问来源于stack exchange,提问作者DiabolicNick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:24:25