Как сохранить результирующую строку SQL-запроса в C #

Закрытие вашего экземпляра окна настроек сразу после его создания. Вам нужно сначала отобразить окно настроек, а затем ждать результата диалога. Если он вернется как отмененный, закройте окно. Например:

private void button1_Click(object sender, EventArgs e)
{
    Settings newSettingsWindow = new Settings();

    if (newSettingsWindow.ShowDialog() == DialogResult.Cancel)
    {
        newSettingsWindow.Close();
    }
}
3
задан marc_s 13 July 2018 в 07:20
поделиться

5 ответов

Если вы ожидаете только одного значения, то 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
5
ответ дан Marc Gravell 17 August 2018 в 13:29
поделиться

Используйте код ниже:

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+" ";
-1
ответ дан Deepak Kumar 17 August 2018 в 13:29
поделиться
  • 1
    if (reader.Read()) {...} вместо while; Интерполяция строк labelTanim.Text = $"Ekipman Tanımı: {tanim}"; более читаема. – Dmitry Bychenko 13 July 2018 в 07:26
  • 2
    На самом деле, я просто дал ему образец кода. Потому что он может получить несколько строк. Он может применять условия в соответствии с его требованием. – Deepak Kumar 13 July 2018 в 07:29
  • 3
    это плохой код, и его не следует поощрять; множественные критические сбои, в том числе уход в SQL-инъекцию, и неспособность распорядиться ни командой, ни читателем. – Marc Gravell♦ 13 July 2018 в 07:36

Что-то вроде этого:

// 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()} ";
    }
}
3
ответ дан Dmitry Bychenko 17 August 2018 в 13:29
поделиться

Вы должны попробовать этот код, он собирает некоторые хорошие практики, такие как:

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 + " ";
}
3
ответ дан Michał Turczyn 17 August 2018 в 13:29
поделиться

Используйте этот код, используя метод 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+" ";    
}

Надеемся, что этот фрагмент кода работает для вас.

0
ответ дан Shubham Indrawat 17 August 2018 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: