背景
我编写了一个使用SQL查询检索数据的函数,然后将该数据输出到标签。目前,搜索字符串被硬编码为" 1002"。该函数在按钮单击事件上触发。
问题
如何从文本框将数据传递到我的SQL查询中,以便我的搜索字符串是文本框的内容,而不是1002?
代码
private void getInfoStationID()
{
String ConnStr = "Data Source=SqlServer; Initial Catalog=Database; User ID=Username; Password=Password";
String SQL = "SELECT stationname FROM dbo.Stations WHERE StationID = 1002";
SqlDataAdapter Adpt = new SqlDataAdapter(SQL, ConnStr);
DataSet question = new DataSet();
Adpt.Fill(question);
foreach (DataRow dr in question.Tables[0].Rows)
{
nameTtb.Text += question.Tables[0].Rows[0]["stationname"].ToString();
}
}
答案 0 :(得分:4)
将查询更改为:
string constring = @""; // Declare your connection string here.
String SQL = "SELECT stationname FROM dbo.Stations WHERE StationID = @StationId";
SqlConnection con = new SqlConnection(constring);
con.Open();
SqlCommand command = new SqlCommand(SQL ,con);
然后你必须像这样在命令对象中添加参数:
command .Parameters.Add("@StationId",SqlDbType.NVarChar).Value = textbox.Text;
现在您可能想知道为什么我在查询中使用了参数。这是为了避免SQL注入。
DataSet ds = new DataSet();
SqlDataAdapter adb = new SqlDataAdapter(command);
adb.Fill(ds);
con.Close();
现在你可以像这样迭代......
foreach (DataRow row in ds.Tables[0].Rows)
{
}
您必须初始化连接对象并在其中传递连接字符串。
答案 1 :(得分:0)
String ConnStr = "Data Source=SqlServer; Initial Catalog=Database; User ID=Username; Password=Password";
string SQL = "SELECT stationname FROM dbo.Stations WHERE StationID = @stationID";
SqlCommand command = new SqlCommand(SQL, ConnStr);
command.Parameters.Add(new SqlParameter("@stationID", SqlDbType.Int));
command.Parameters["@stationID"].Value = textbox.Text;
答案 2 :(得分:0)
您可以更改SQL字符串以使用变量(如@StationID),然后将变量添加到textbox.text的查询中
String SQL = "SELECT stationname FROM dbo.Stations WHERE StationID = @StationID";
SqlCommand cmd = new SqlCommand;
cmd.CommandText = SQL;
cmd.CommandType = CommandType.Text;
cmd.Connection = ConnStr;
cmd.Parameters.AddWithValue("@StationID", Textbox1.Text);
da = new SqlDataAdapter(cmd);
DataSet nds = new DataSet();
da.Fill(nds);