1

我正在创建一个应用程序,我可以在其中添加客户的名字、姓氏、电子邮件、日期、服务类型(电脑维修)、技术人员电脑品牌、电脑类型、操作系统类型以及电脑问题。我可以使用 phpMyAdmin 将数据插入 MySQL 数据库。

但是,我坚持这部分。我正在尝试查看刚刚创建的服务订单。我想按客户的姓氏加载组合框,一旦我单击客户的姓名,它就会填充上面提到的所有字段以及它插入数据库的服务编号。我在加载组合框和 texfields 时遇到问题。

任何想法表示赞赏!如果组合框是一个坏主意并且有更好的方法,请告诉我!我试过这段代码,但 SQLDataAdapter 不适合我。我不知何故找不到一个我也可以联系起来的例子。

private void cbViewServices_SelectedIndexChanged(object sender, EventArgs e)
{
  if (cbViewServices.SelectedIndex >- 1)
  {
    string lastName = cbViewServices.SelectedValue.ToString();                
    MySqlConnection conn = new MySqlConnection("server=localhost;uid=******;password=**********;database=dboserviceinfo;");
    conn.Open();

    SqlDataAdapter da = new SqlDataAdapter("select distinct LastName from tserviceinfo where LastName='" + lastName + "'", conn);

    DataSet ds = new DataSet();
    da.Fill(ds); conn.Close();
  }
}
4

6 回答 6

4

我不建议使用“姓氏”作为参数来加载您的详细信息,因为该字段很可能不是唯一的。除非您的程序中出现这种情况。

此示例执行以下操作:

  1. 将客户 ID(或您的姓氏)加载到组合框。
  2. 处理组合框的更改事件并将其作为参数传递给将使用它来加载详细信息的方法。
  3. 使用传递的参数加载客户详细信息。

一些指导方针:

  1. 将一次性物品包含在“使用”语句中,以便正确处理。
  2. 不要使用字符串连接来创建 SQL 语句。改用 SQL 参数,这样可以避免 SQL 注入并使代码更清晰。
  3. 查看 MySQL .NET 连接器提供程序文档以了解最佳实践。

    //Load customer ID to a combobox
    private void LoadCustomersId()
    {
        var connectionString = "connection string goes here";
        using (var connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            var query = "SELECT Id FROM Customers";
            using (var command = new MySqlCommand(query, connection))
            {
                using (var reader = command.ExecuteReader())
                {
                    //Iterate through the rows and add it to the combobox's items
                    while (reader.Read())
                    {
                        CustomerIdComboBox.Items.Add(reader.GetString("Id"));    
                    }
                }    
            }
        }
    }
    
    //Load customer details using the ID
    private void LoadCustomerDetailsById(int id)
    {
        var connectionString = "connection string goes here";
        using (var connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            var query = "SELECT Id, Firstname, Lastname FROM Customer WHERE Id = @customerId";
            using (var command = new MySqlCommand(query, connection))
            {
                //Always use SQL parameters to avoid SQL injection and it automatically escapes characters
                command.Parameters.AddWithValue("@customerId", id);
                using (var reader = command.ExecuteReader())
                {
                    //No customer found by supplied ID
                    if (!reader.HasRows)
                        return;
    
                    CustomerIdTextBox.Text = reader.GetInt32("Id").ToString();
                    FirstnameTextBox.Text = reader.GetString("Firstname");
                    LastnameTextBox.Text = reader.GetString("Lastname");
                }
            }
        }
    }
    
    //Pass the selected ID in the combobox to the customer details loader method 
    private void CustomerIdComboBox_SelectedIndexChanged(object s, EventArgs e)
    {
        var customerId = Convert.ToInt32(CustomerIdComboBox.Text);
        LoadCustomerDetailsById(customerId);
    }
    

我不完全确定这是否是您要寻找的,但大多数准则仍然适用。

希望这可以帮助!

于 2012-07-31T02:50:23.653 回答
2

尝试像这样将数据绑定到组合框:

public void ListCat()
{
    DataTable linkcat = new DataTable("linkcat");
    using (SqlConnection sqlConn = new SqlConnection(@"Connection stuff;"))
    {
        using (SqlDataAdapter da = new SqlDataAdapter("SELECT LastName FROM list WHERE LastName <> 'NULL'", sqlConn))
        {
            da.Fill(linkcat);
        }
    }
    foreach (DataRow da in linkcat.Rows)
    {
        comboBox1.Items.Add(da[0].ToString());
    }
}

取自我自己的问题

于 2012-07-31T01:03:51.333 回答
1

SqlDataAdapter 用于与 SQL Server 而不是 MySQL 进行通信。

尝试以下操作:

MySqlDataAdapter da = new MySqlDataAdapter("select distinct LastName from tserviceinfo where LastName='" + lastName + "'", conn);
于 2012-07-31T01:07:31.140 回答
0

我们也可以使用while循环。在 SQLDatareader 完成数据库连接后,我们可以使用 while 循环。

"userRead" 是 SQLData 阅读器

  while (userRead.Read())
   {
        cboxReportNo.Items.Add(userRead[1].ToString());
   }
于 2017-03-26T07:32:53.253 回答
0

在ComboBox DataSource中绑定您的数据集

this.comboBox1.DataSource = ds;
this.comboBox1.DisplayMember = "LastName";
this.comboBox1.ValueMember = "Id";
this.comboBox1.SelectedIndex = -1;
this.comboBox1.AutoCompleteMode = AutoCompleteMode.Append;
this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
于 2017-08-04T07:24:28.087 回答
-1
//USING
        using System;
        using System.Drawing;
        using System.Windows.Forms;
        using System.Data.SqlClient;
        using System.Data;

namespace YourNamespace
{
//Initialization
        string connetionString = null;
        SqlConnection cnn;
        SqlCommand cmdDataBase;
        SqlDataReader reader;
        DataTable dt;

public frmName()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
            FillComboNameOfCombo();
        }

void FillcmbNameOfCombo()
{
    string sqlQuery = "SELECT * FROM DATABASENAME.[dbo].[TABLENAME];";
            connetionString = "Data Source=YourPathToServer;Initial Catalog=DATABASE_NAME;User ID=id;Password=pass";
                    cnn = new SqlConnection(connetionString); 
                    cmdDataBase = new SqlCommand(sqlQuery, cnn);
            try { 
                    cnn.Open(); 

                    reader = cmdDataBase.ExecuteReader();
                    dt = new DataTable();

                    dt.Columns.Add("ID", typeof(string));
                    dt.Columns.Add("COLUMN_NAME", typeof(string));
                    dt.Load(reader);
                    cnn.Close();

                    cmbGender.DataSource = dt;
                    cmbGender.ValueMember = "ID";
                    cmbGender.DisplayMember = "COLUMN_NAME";

                    dt = null;
                    cnn = null;
                    cmdDataBase = null;
                    connetionString = null;
                    reader = null;
                }
            catch (Exception ex) { 
                    MessageBox.Show("Can not open connection ! " + ex.ToString());
                }
}
}
于 2016-09-29T16:54:02.857 回答