2015-01-24 2 views
1

фонаPass строки в SQL Query из Textbox

Я написал функцию, которая извлекает данные с помощью запроса 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(); 
    } 
} 
+3

Посмотрите на параметризованные запросы и 'SqlCommand'. –

ответ

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) 
{ 

} 

И вы должны инициализировать объект соединения и передать строку соединения в нем.

+0

Отличный ответ с пояснениями! Объяснение того, что на самом деле происходит, действительно помогает, когда вы изучаете новый язык. Спасибо. –

+0

Этот ответ создает ошибку .... –

+0

SqlCommand command = new SqlCommand (SQL, ConnStr); –

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; 
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); 
+1

[Не использовать AddWithValue] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/). – BCdotWEB

+0

Полезно знать, спасибо. – Hive

Смежные вопросы