我目前有一个下拉列表,其中装有数据库中位置表中的位置。位置表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转换为数字时出错。'
答案 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);