如何使用C#将数据从其他表单调用到文本框?

时间:2017-09-21 10:57:58

标签: c# mysql wpf database winforms

所以我有这个代码我用于我的项目。它应该生成在文本框中输入的数字,但事情是在我保存png后,一旦你在文本框中编辑文本,QrCode将生成新的。所以,为了避免这种情况,我把文本框放在readonly上,这里应该显示的数据是来自数据库的数据。但它总是空着的。这是我在表单上的代码,我将从数据库中获取数据。

 private void qrcode_Click(object sender, RoutedEventArgs e)
    {
        QRCode qr = new QRCode();
        qr.Show();
        this.Hide();
        qnum = driver("Select LicenseNumber from driver where FranchiseNumber = '" + fn + "'").ToString();
    }

这是我传递数据的地方。

public QRCode()
    {
        InitializeComponent();
        textBox1.Text = AddDriver.qnum;
        //textBox1.Text = "hello";
    }

我试着打招呼,看看它是否会显示,是的。但是,当我尝试上面的那个时,什么都没有。 任何人都可以帮助我,并告诉我什么是错的。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题,这就是我使用的代码。希望它可以提供帮助。

public partial class AddDriver : Window
{

    MySqlConnection connection = new MySqlConnection();
    MySqlDataAdapter adapter = new MySqlDataAdapter();
    DatabaseController db = new DatabaseController();

    public static string qnum;
    public AddDriver()
    {
        InitializeComponent();
    }
    private void btn_home_Click(object sender, RoutedEventArgs e)
    {
        MainWindow main = new MainWindow();
        main.Show();
        this.Hide();
    }
    public DataTable driver(string query)
    {
        DataTable dtable = new DataTable();
        try
        {
            OpenDbase(query);
            adapter.Fill(dtable);
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return dtable;
    }
    private void OpenDbase(string query)
    {
        try
        {
            string connectionstring = "server=sql12.freemysqlhosting.net; port=3306; user id=sql12192362; password= DtxpressProject25!; persistsecurityinfo=False;database=sql12192362";
            connection = new MySqlConnection(connectionstring);
            adapter.SelectCommand = new MySqlCommand(query, connection);
            MySqlCommandBuilder cb = new MySqlCommandBuilder(adapter);
            connection.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void qrcode_Click(object sender, RoutedEventArgs e)
    {
        string fn = fnum.Text;
        int count = driver("Select * from driver where FranchiseNumber ='" + fn + "'").DefaultView.Count;
        if (count > 0)
        {
            MessageBox.Show("'"+fn+"' is already on the list");
        }
        else
        {
            OpenDbase("Insert into driver (LastName, FirstName,MidInitial,Address,Contact,FranchiseNumber,LicenseNumber,Income, Password) values ('" + this.lname.Text + "','" + this.fname.Text + "','" + this.midint.Text + "','" + this.addrss.Text + "','" + this.contact.Text + "','" + this.fnum.Text + "','" + this.lnum.Text + "', '0', '" + this.fnum.Text + "')");
            DataTable dtable = new DataTable();
            adapter.Fill(dtable);
            connection.Close();
        }

        QRCode qr = new QRCode();
        qr.Show();
        this.Hide();
        qnum = fnum.Text;
    }

这是我将通过的地方。

public partial class QRCode : Form
{
    [SerializableAttribute]
    [ComVisibleAttribute(true)]
    public class ArgumentNullException : ArgumentException { }

    MySqlConnection connection = new MySqlConnection("server=sql12.freemysqlhosting.net; port=3306; user id=sql12192362; password= DtxpressProject25!; persistsecurityinfo=False;database=sql12192362");
    MySqlCommand command;
    public QRCode()
    {
        InitializeComponent();
    }

    private void btn_gen_Click(object sender, EventArgs e)
    {
        Zen.Barcode.CodeQrBarcodeDraw qrcode = Zen.Barcode.BarcodeDrawFactory.CodeQr;
        pictureBox1.Image = qrcode.Draw(textBox1.Text, 50);

        SaveFileDialog f = new SaveFileDialog();
        f.Filter = "PNG(*.PNG)|*.png";

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

            pictureBox1.Image.Save(f.FileName);
            MessageBox.Show("QR Code has been successfully saved.");
        }
    }

    private void btn_sve_Click(object sender, EventArgs e)
    {
        MemoryStream ms = new MemoryStream();
        byte[] img = ms.ToArray();
        string fn = AddDriver.qnum.ToString();

        String insertQuery = "Update driver set QrCode = '" + @img + "' where FranchiseNumber= '"+fn+"'";

        connection.Open();
        command = new MySqlCommand(insertQuery, connection);
        command.Parameters.Add("@img", MySqlDbType.Blob);

        command.Parameters["@img"].Value = img;

        if (command.ExecuteNonQuery() == 1)
        {
            MessageBox.Show("Driver has been added.");
        }
        connection.Close();
        AddDriver back = new AddDriver();
        back.Show();
        this.Hide();
    }
到目前为止,它工作得很好。还要感谢那些回答的人。

答案 1 :(得分:0)

尝试设置" qnum" string包含string中包含DataTable,并在显示窗口之前将其设置为

private void qrcode_Click(object sender, RoutedEventArgs e)
{
    vr dt = driver("Select LicenseNumber from driver where FranchiseNumber = '" + fn + "'");
    qnum = "";
    if(dt != null)
    { 
        foreach(var row in dt.Rows)
            qnum += row["LicenseNumber"].ToString() + ", ";  
    }

    QRCode qr = new QRCode();
    qr.Show();
    this.Hide();  
}

另请注意,在执行动态SQL查询时应使用参数:

How does SQLParameter prevent SQL Injection?