c# - 数据未写入MYSQL数据库

标签 c# mysql sql .net database

我在将信息写入数据库时​​遇到问题。我使用的是从 YouTube 上观看视频中学到的方法,我们制作了一个查询字符串并输入了所有INSERT INTO内容,但我正在尝试一种新的方法,使用我读过的参数更安全,可以防止 SQL 注入(inject),而我读过的这些参数是不好的。

我正在使用下面的代码,一切运行正常,没有错误,它正在连接到我的 FTP 服务器并执行所有操作。我的问题是,它没有像以前使用安全性较低的代码时那样将任何输入的用户信息写入 MYSQL 数据库。

另外,如果回答这个问题的人知道如何检查用户名是否已被数据库占用,请告诉我,这样我就不必提出单独的问题。我尝试过类似的事情

if(Reader.HasRows) MessageBox.Show("Username Taken");

但我收到错误使用未分配的局部变量“reader”

我正在使用的代码:

    private void btnRegister_Click(object sender, EventArgs e)
    {
    MySqlDataReader reader;
    int numerror = 0;
    if (RUsernameTextBox.Text == "")
    {
        numerror = numerror + 1;
    }
    if (RPasswordTextBox.Text == "")
    {
        numerror = numerror + 1;
    }
    if (REmailTextBox.Text == "")
    {
        numerror = numerror + 1;
    }
    if (numerror == 1)
    {
        ErrorLabel.Text = "*1 required field is blank.";
    }
    else if (numerror == 2)
    {
        ErrorLabel.Text = "*2 required fields are blank";
    }
    else if (numerror == 3)
    {
        ErrorLabel.Text = "*3 required fields are blank";
    }
      else
        {
         if (reader.HasRows) CMessageBox("Error", "");
            //add the user to the MySQL database
            string HashedPassword = EncodePassword(RPasswordTextBox.Text);
            string constring = "datasource=localhost;port=3306;username=Admin;password=**********";
            using (MySqlConnection con = new MySqlConnection(constring))
            {
                MySqlCommand cmd = new MySqlCommand("INSERT INTO userinfo.users (username,password,email,premium,picture) VALUES (@username, @hashedpassword, @email , @premium , @picture);");
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                cmd.Parameters.AddWithValue("@Username", RUsernameTextBox.Text);
                cmd.Parameters.AddWithValue("@hashedpassword", HashedPassword);
                cmd.Parameters.AddWithValue("@email", REmailTextBox.Text);
                cmd.Parameters.AddWithValue("@premium", "0");
                cmd.Parameters.AddWithValue("@picture","ftp://***.***.*.**/Profile Pictures/" + RUsernameTextBox.Text + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png");

                try
                {
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                    MakeLoginVisible();
                    try
                    {
                        string TempFolder = Path.GetTempPath();
                        RProfilePicture.Image.Save(@"C:\temp\" + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png", System.Drawing.Imaging.ImageFormat.Png);
                        ftp ftpclient = new ftp(@"ftp://***.***.*.**/", "Admin", "**********");
                        ftpclient.createDirectory("Profile Pictures/" + RUsernameTextBox.Text);
                        ftpclient.upload("Profile Pictures/" + RUsernameTextBox.Text + "/" + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png", @"C:\temp\" + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png");
                        MakeLoginVisible();
                        CMessageBox("Success!", "AirSpace Account '" + RUsernameTextBox.Text + "' Created.");
                        ftpclient = null;
                    }
                    catch (Exception ex)
                    {
                        CMessageBox("Error", ex.Message.ToString());
                    }
                }
                catch (Exception ex)
                {
                    CMessageBox("Error", ex.Message.ToString());
                }
            }
        }

最佳答案

Use of unassigned local variable 'xxx'

意味着编译器无法断定您在给定时间已为某个变量赋予了值。为它分配任何内容(包括 null)都会删除该错误消息,因为这样编译器就会知道您已经考虑过该变量的内容。

关于c# - 数据未写入MYSQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460246/

相关文章:

mysql - 选择最佳输出

保存多个图像后 C# GDI+ 一般错误/外部异常

c# - 作为代码修复的一部分在类上实现接口(interface)

c# - 无法读取文档开头带有字符的 XML 文件

mysql - MySQL创建函数出错

php - 使用 Like 和 Left Join 进行搜索

c# - SQL Azure 每 10 秒延迟响应一次

sql - 如何将两个表合并在一起,选择具有较高值的​​列,而无法使用 MERGE 语句?

c# - Azure 认知服务上的文本识别

java - 通过 Hibernate Projections on Entity with ManyToOne 关系在 SQL 查询中使用更少的列