c# - 将 .csv 文件从一个按钮传递到另一个按钮以将其上传到数据库中

标签 c# mysql

这是我第一次使用表单,所以我对此有点陌生。

我正在开发一个表单,允许用户从本地磁盘选择 .csv 文件并将其上传/插入到数据库中以更新表。

我的表单如下所示:

enter image description here

select file按钮,用户可以选择一个 .csv 文件,该文件的路径将显示在按钮上方的文本框中。如果用户单击 Upload File按钮,它将所选的 .csv 文件上传到数据库中。

到目前为止我所取得的成就:

现在,我成功地制作了用户可以选择 .csv 文件的部分,并且文件的路径将显示在文本框中。

但我似乎无法让第二个按钮工作。

我的问题:

  • 如何从第一个按钮获取文件并在第二个按钮中使用它 按钮将其更新到数据库中?

我的代码:

我的按钮代码如下:

    public System.Windows.Forms.Button button1;
    public System.Windows.Forms.TextBox textBox1;
    public System.Windows.Forms.Button button2;

    public void Button()
    {
        button1.Click += new EventHandler(Button_Click);
    }

    public void Button_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog1 = new OpenFileDialog();
        openFileDialog1.InitialDirectory = @"C:\";
        openFileDialog1.Title = "Browse .csv Files";

        openFileDialog1.CheckFileExists = true;
        openFileDialog1.CheckPathExists = true;

        openFileDialog1.DefaultExt = ".csv";
        openFileDialog1.Filter = "Csv files (*.csv)|*.csv|All files (*.*)|*.*";
        openFileDialog1.FilterIndex = 2;
        openFileDialog1.RestoreDirectory = true;



        openFileDialog1.ReadOnlyChecked = true;

        openFileDialog1.ShowReadOnly = true;



        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {

            textBox1.Text = openFileDialog1.FileName;

            Button2();
        }
    }

    public void Button2()
    {
        button2.Click += new EventHandler(Button2_Click);
    }

    public void Button2_Click(object sender, EventArgs e)
    {


        Console.WriteLine("[Core] Opening database connection.");
            if (Database.stockConn.State != ConnectionState.Open)
            {
                Database.openStockConn(Settings.databaseName, Settings.databaseUsername, Settings.databasePassword, Settings.sshHost, Settings.sshUsername, Settings.sshPassword);
            }
            Console.WriteLine("[Core] database connection is now open!\n");

            Database.stockConn.Open();
            try
                    {
   // not sure if 'textBox1.Text' is the right variable for the file
                        MySqlCommand cmd = new MySqlCommand("LOAD DATA INFILE" + textBox1.Text + "INTO TABLE catalog_product_entity_decimal_copy FIELDS TERMINATED BY ','");
                        cmd.ExecuteNonQuery();

                        MessageBox.Show("File Has Been Uploaded Into The Database SuccessFully!");
                    }
                    catch
                    {
                        MessageBox.Show("Couldn't Upload File Into Database!");
                    }
        }

在上面的代码中我使用了 textBox1.Text作为所选 .csv 文件的变量,但我不认为这是我应该用来完成这项工作的变量。

因此,如果有人可以帮助我/向我解释如何将 .csv 文件从第一个按钮传递到第二个按钮,我将非常感激。

编辑:

根据一些人的要求,这里进行了编辑:

我的问题不是我的查询不起作用,是的,我作为示例给出的查询并不完全正确,但它只是作为示例。我知道如何在 C#/MySql 中编写/执行正确的查询。

还有:

在我的示例中,我使用了 textBox1.Text作为我的文件,但这不起作用,因为 textBox1.Text只是文件的路径,而不是文件本身。

最佳答案

我会做类似下面的事情。

私下声明您的文件对话框或在设计模式下将文件对话框控件拖到窗体上,这将实现相同的效果。完成后,您可以引用对话框的 FileName 属性并分配给文本框,或者直接从控件使用该属性。

private readonly FileDialog _fileDialog = new OpenFileDialog();

private void btnSelectFile_Click(object sender, EventArgs e)
{
    if (_fileDialog.ShowDialog() == DialogResult.OK)
    {
        txtPathToFile.Text = _fileDialog.FileName;
    }
}

如果在事件中声明,则将 FileName 属性分配给文本框。

var myFileDialog = new OpenFileDialog();

if (myFileDialog.ShowDialog() == DialogResult.OK)
{
     txtPathToFile.Text = myFileDialog.FileName;
}

获取路径。再次访问对话框控件的 FileName 属性,或者可以将其分配给文本框并读取其文本值。无论哪种方式都可以。

private void btnUpload_Click(object sender, EventArgs e)
{
    var pathFromDialogControl = _fileDialog.FileName;
    var pathFromTextBox = txtPathToFile.Text;
    //Do something here
}

希望有帮助。

关于c# - 将 .csv 文件从一个按钮传递到另一个按钮以将其上传到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50468001/

相关文章:

c# - 如何确定一组值的标准偏差 (stddev)?

mysql - 限制在 MySQL 问题的左连接中返回的行

C# 继承窗体中的类

c# - 如何从 WPF 中的堆栈面板中删除最后一个子项?

c# - 将文件上传到 Amazon S3 中的存储桶失败并显示 "Maximum number of retry attempts reached"

mysql - 如何将两个嵌套的 MySQL 查询合并到一个 View 中?

mysql - 为每条记录返回一个新行

php - 如何传递数据 Controller 以在 codeigniter 中查看

mysql - 在 MySQL 中如何设置属性的限制

c# - 为什么委托(delegate)逆变对值类型不起作用?