C# 如果选择组合框,则文本框中的数据库值
我正在尝试为一个表单编写代码,该表单可以写入sql表。我使用其他表格中的数据来完成表格(以及用户输入)。我有一个复选框可以选择combobox(ddDefect)的源——它基于两个类似sql的查询之一——因此,如果复选框=true,combox将显示一个类似查询的结果,如果复选框=false,则显示另一个类似查询的结果。这部分很好用。问题是;我似乎不知道如何在组合框中选择所选项目并在我的文本框(txtNcm)中显示另一列的文本 我尝试过各种方法,这对我来说似乎是最有意义的(虽然我只是一个初学者,而且毫无头绪),但我的文本框里什么都没有 以下是我一直在尝试的代码:C# 如果选择组合框,则文本框中的数据库值,c#,C#,我正在尝试为一个表单编写代码,该表单可以写入sql表。我使用其他表格中的数据来完成表格(以及用户输入)。我有一个复选框可以选择combobox(ddDefect)的源——它基于两个类似sql的查询之一——因此,如果复选框=true,combox将显示一个类似查询的结果,如果复选框=false,则显示另一个类似查询的结果。这部分很好用。问题是;我似乎不知道如何在组合框中选择所选项目并在我的文本框(txtNcm)中显示另一列的文本 我尝试过各种方法,这对我来说似乎是最有意义的(虽然我只是一个初学者,
private void ddDefect_SelectedIndexChanged(object sender, EventArgs e)
{
string constring = "Data Source=TS-ERP01;Initial Catalog=Touchstn02;Integrated Security=True";
string Query = "select * from Defect_Codes Where DESCP_91= ' " + ddDefect.Text + " ';";
SqlConnection conDataBase = new SqlConnection(constring);
SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase);
SqlDataReader myReader;
try
{
conDataBase.Open();
myReader = cmdDataBase.ExecuteReader();
while (myReader.Read())
{
string sDEF = myReader["DEFECT_91"] as String;
txtNcm.Text = sDEF;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
sql命令文本包含ddDefect值前后的空格
....DESCP_91= ' " + ddDefect.Text + " ';";
^ ^
这些空格将按原样传递给数据库引擎,除非在数据库列(CHAR/NCHAR)中有一个非常特定的数据类型,并且在列中的值周围有这些精确的空格,否则该命令将永远找不到任何数据
但这并不是你问题的终结。以这种方式连接字符串是一个众所周知的问题源。如果ddDefect.Text包含一个引号怎么办?另一个语法错误。然后是一个非常严重的安全问题
所以您应该使用这样的参数化查询
string constring = "Data Source=TS-ERP01;Initial Catalog=Touchstn02;Integrated Security=True";
string Query = "select * from Defect_Codes Where DESCP_91= @ds91";
using(SqlConnection conDataBase = new SqlConnection(constring))
using(SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase))
{
try
{
conDataBase.Open();
cmdDataBase.Parameters.Add("@ds91", SqlDbType.NVarChar).Value = ddDefect.Text;
using(SqlDataReader myReader = cmdDataBase.ExecuteReader())
{
while (myReader.Read())
{
string sDEF = myReader["DEFECT_91"].ToString();
txtNcm.Text = sDEF;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
还要注意,SqlConnection、SqlCommand和SqlDataReader都是一次性对象,因此您应该尝试始终使用using语句来确保这些对象释放在工作期间获取的非托管资源(特别是SqlConnection对象)如果调试代码,“sDEF”中包含什么?正确的值?“我似乎不知道如何在组合框中获取所选项目”-使用:
(发送者作为组合框)。SelectedItem
。效果很好-你们太棒了。还感谢您为安全性添加的提示和代码-非常感谢!