从下拉列表中选择值时,如何将数据库中的值输入文本框

时间:2018-12-17 01:19:09

标签: c# sql database

我目前有一个下拉列表,其中装有数据库中位置表中的位置。位置表alco包含一个“ Miles”列。

我想做的是,一旦在下拉列表中选择了一个位置,文本框就会填充英里。

我已经尝试过此代码;

public string conString = "Data Source=DESKTOP-86TC1QA\\MSSSQLSERVER17;Initial Catalog=AttendanceApp;Integrated Security=True";

    private void location_comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(conString);
        SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Miles = '" + location_comboBox.Text + "'",con);
        con.Open();
        cmd.ExecuteNonQuery();
        SqlDataReader dr;
        dr = cmd.ExecuteReader();
        while (dr.Read())

        {
            var Miles = (string)dr["Miles"].ToString();
            mileage_textbox.Text = Miles;
        }
        con.Close();
    } 

但是会产生以下错误,我不确定如何解决。

  

System.Data.SqlClient.SqlException:'将数据类型varchar转换为数字时出错。'

3 个答案:

答案 0 :(得分:0)

如果您发现您的select语句看起来不正确。当您在where子句中传递Miles时,您尝试获取Miles。

首先,您必须更改列的名称。假设表具有列名Location,则查询应如下所示-

      SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Location = 
      '" + location_comboBox.Text + "'",con);

尽管,以上更改应按您的预期进行,但是不建议使用此代码,因为它可能会引起SQL注入问题,您可能需要阅读一下。 传递参数的理想方法应如下-

        // 1. Create SQL Command  
        SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Location 
        = @location", conn);

        // 2. define parameters used in above command 
        SqlParameter param  = new SqlParameter();
        param.ParameterName = "@location";
        param.Value         = location_comboBox.Text;

        // 3. add new parameter to command 
        cmd.Parameters.Add(param);

        // get data stream
        dr= cmd.ExecuteReader();

答案 1 :(得分:0)

您可以使用此:

var conString = "Data Source=DESKTOP-86TC1QA\\MSSSQLSERVER17;Initial Catalog=AttendanceApp;Integrated Security=True";

using (var connection = new SqlConnection(connectionString)) {
    connection.Open();
    using (var command = new SqlCommand("SELECT * FROM Location_Table WHERE Location 
    = @location", connection)) {
        command.Parameters.Add(new SqlParameter("location", Int32.Parse(location_comboBox.SelectedValue.ToString());
        var reader = command.ExecuteReader();
        while (reader.Read()) {
            var Miles = (string)dr["Miles"].ToString();
            mileage_textbox.Text = Miles;
        }
    }
}

处置资源始终是一个好主意。另外,location_combobox是一个令人困惑的下拉名称。

您必须使用以下内容从下拉列表中获取所选值并将其解析为整数。

Int32.Parse(dropdown.SelectedValue.ToString());

答案 2 :(得分:0)

请按照以下给定查询更改SQL查询,因为在SQL表中里程似乎是数字:

SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Miles = " + 
location_comboBox.Text, con);