Закрытие вашего экземпляра окна настроек сразу после его создания. Вам нужно сначала отобразить окно настроек, а затем ждать результата диалога. Если он вернется как отмененный, закройте окно. Например:
private void button1_Click(object sender, EventArgs e)
{
Settings newSettingsWindow = new Settings();
if (newSettingsWindow.ShowDialog() == DialogResult.Cancel)
{
newSettingsWindow.Close();
}
}
Если вы ожидаете только одного значения, то ExecuteScalar
намного проще, чем использование читателя, т. е.
labelTanim.Text = Convert.ToString(cmdTanim.ExecuteScalar());
. В общем, возможно, рассмотрим такие инструменты, как «Dapper», которые сделают это простым даже в многострочных случаях и тривиально решают задачу SQL-инъекции:
string s = connect.QuerySingle<string>(
"select Tanım from TümEnvanter$ where Ekipman = @val", // command
new { val = comboBox_ekipman.Text }); // parameters
Используйте код ниже:
SqlCommand cmdTanim = new SqlCommand("select Tanım from TümEnvanter$ where Ekipman = '" + comboBox_ekipman.Text + "'", connect);
connect.Open();
SqlDataReader reader = cmdTanim.ExecuteReader();
string tanim = string.Empty;
while (reader.Read())
{
tanim= reader["Tanım"].ToString()
}
labelTanim.Text = "Ekipman Tanımı: "+tanim+" ";
if (reader.Read()) {...}
вместо while
; Интерполяция строк labelTanim.Text = $"Ekipman Tanımı: {tanim}";
более читаема.
– Dmitry Bychenko
13 July 2018 в 07:26
Что-то вроде этого:
// wrap IDisposable into using
using (SqlConnection connect = new SqlConnection("Put_Connection_String_Here"))
{
connect.Open();
// Make SQL readable and parametrized
string sql =
@"select Tanım
from TümEnvanter$
where Ekipman = @prm_Ekipman";
// wrap IDisposable into using
using (SqlCommand cmdTanim = new SqlCommand(sql, connect))
{
//TODO: explicit typing Add(..., DbType...) is a better choice then AddWithValue
cmdTanim.Parameters.AddWithValue("@prm_Ekipman", comboBox_ekipman.Text);
// We want one record only; ExecuteScalar() instead of ExecuteReader()
// String interpolation shortens the code
labelTanim.Text = $"Ekipman Tanımı: {cmdTanim.ExecuteScalar()} ";
}
}
Вы должны попробовать этот код, он собирает некоторые хорошие практики, такие как:
1) Использует оператор using
для освобождения невозвращенных ресурсов (соединения SQL, IDisposable
s в целом).
2) Предотвращает SQL-инъекцию с использованием поля Parameters
объекта SqlCommand
.
Кроме того, я использовал метод ExecuteScalar
, упомянутый @MarcGravell, который упрощает код.
public void SqlConn()
{
string tanim = null;
using (SqlConnection connect = new SqlConnection("connectionString"))
{
using (SqlCommand cmdTanim = new SqlCommand())
{
cmdTanim.Connection = connect;
cmdTanim.CommandText = "select Tanım from TümEnvanter$ where Ekipman = @param";
cmdTanim.Parameters.Add("@param", SqlDbType.VarChar).Value = comboBox_ekipman.Text;
connect.Open();
tanim = (string)cmdTanim.ExecuteScalar();
}
}
labelTanim.Text = "Ekipman Tanımı: " + tanim + " ";
}
Используйте этот код, используя метод reader()
для SqlDataReader
для чтения и доступа к содержимому SqlDataReader.
SqlCommand cmdTanim = new SqlCommand("select Tanım from TümEnvanter$ where Ekipman = '" + comboBox_ekipman.Text + "'", connect);
connect.Open();
SqlDataReader reader = cmdTanim.ExecuteReader();
if(reader.HasRows){
reader.read();
string tanim = reader.ToString();
labelTanim.Text = "Ekipman Tanımı: "+tanim+" ";
}
Надеемся, что этот фрагмент кода работает для вас.