【问题标题】:C# MySql Data not being written/read properlyC# MySql 数据未正确写入/读取
【发布时间】:2015-02-17 10:46:26
【问题描述】:

我正在尝试制作的程序遇到问题,这是为了检查 mysql 数据库以查看该名称的用户是否已经退出,如果没有,它应该创建一个,并且如果是,它应该会显示错误提示。

没有编译错误,它已经到了代码的末尾,告诉我“用户已创建”但没有数据被添加到数据库中,不知道我哪里出错了,谢谢!

 using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;
    using MySql.Data.MySqlClient;

    namespace Oswald
    {
        public partial class frmRegister : Form
        {
            public frmRegister()
            {
                InitializeComponent();
            }

            private void btnRegister_Click(object sender, EventArgs e)
            {
                    String mysqlConnectionString = "Server=sql3.freesqldatabase.com;Database=sql367701;UID=sql367701;Password=*****;Port=3306";
                    MySqlConnection connection = new MySqlConnection(mysqlConnectionString);
                    connection.Open();

                    string query = "SELECT * FROM UserInfo WHERE Username='" + txtUsername.Text + "'";
                    bool exists = false;

                    MySqlCommand cmd = new MySqlCommand(query, connection);
                    MySqlDataReader reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        if(txtUsername.Text == reader.GetString("Username"))
                        {
                            MessageBox.Show("User Already Exits", "Oswald", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            exists = true;
                        }
                        else { exists = false; }
                    }

                    reader.Close();

                    if (exists == false)
                    {
                        query = "INSERT INTO UserInfo (Username, Password, Email, IP) VALUES (@username, @password, @ip);";

                        string ip = new WebClient().DownloadString(@"http://icanhazip.com").Trim();

                        using (MySqlCommand cmd2 = new MySqlCommand(query, connection))
                        {
                            cmd.Parameters.AddWithValue("@username", txtUsername.Text);
                            cmd.Parameters.AddWithValue("@password", txtPassword.Text);
                            cmd.Parameters.AddWithValue("@email", txtEmail.Text);
                            cmd.Parameters.AddWithValue("@ip", ip);
                            cmd.ExecuteNonQuery();
                        }

                        MessageBox.Show("Account Created!", "Oswald", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                }
            }
        }

【问题讨论】:

    标签: c# mysql .net winforms


    【解决方案1】:

    您在插入语句中缺少电子邮件。应该是cmd2。您正在查询cmd

    query = "INSERT INTO UserInfo (Username, Password, Email, IP) VALUES (@username, @password, @email, @ip)";
    using (MySqlCommand cmd2 = new MySqlCommand(query, connection))
    {
      cmd2.Parameters.AddWithValue("@username", txtUsername.Text);
      cmd2.Parameters.AddWithValue("@password", txtPassword.Text);
      cmd2.Parameters.AddWithValue("@email", txtEmail.Text);
      cmd2.Parameters.AddWithValue("@ip", ip);
          int rows = cmd.ExecuteNonQuery();
          if(rows > 0)
                MessageBox.Show("insert OK...");
    }
    

    【讨论】:

    • 谢谢你,愚蠢的错误!我已经尝试编辑代码并添加它,但最终结果是相同的,数据库中没有新条目!
    【解决方案2】:

    我认为您在将详细信息保存到数据库时使用的是 cmd 而不是 cmd2。 :)

    【讨论】:

    • 还有@Ajay Punekar 提到的电子邮件。
    【解决方案3】:

    另外,您可以在您的代码中使用短期版本;)

                    string query = "SELECT COUNT(*) FROM UserInfo WHERE Username='" + txtUsername.Text + "'";
    
                    MySqlCommand cmd = new MySqlCommand(query, connection);
    
                    if (cmd.ExecuteScalar()>0)
                    {
                            MessageBox.Show("User Already Exits", "Oswald", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                           query = "INSERT INTO UserInfo (Username, ...
    

    或者您可以为 UserInfo 添加唯一索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多