Я пытаюсь получить имя сотрудника из базы данных и заполнить его в текстовом поле для соответствующего идентификатора сотрудника.
Я попробовал этот код, но на странице ничего не происходит. Он просто перезагружается, а текстовое поле (имя) остается пустым.
SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-0FUUV7B\SQLEXPRESS;Initial Catalog=EmployeeDetails;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("select * from ProfessionalDetails where EmpId='"+EmployeeId.Text+"'", con);
SqlDataReader da = cmd.ExecuteReader();
while (da.Read())
{
Name.Text = da.GetValue(1).ToString();
}
con.Close();
Вы отладили его и нашли, в чем проблема, потому что код высокого уровня выглядит нормально, поэтому существует много возможностей проблемы, например, EmployeeId.Text имеет значение null, не может подключиться к db, da.GetValue (1) имеет значение null. Итак, сначала добавьте try и catch, затем отладьте его и найдите строку, в которой проблема,
Лучшим решением является выполнение оператора sql через параметризованное значение. Подробности этого процесса приведены ниже:
using (SqlConnection con = new SqlConnection(live_connectionString))
{
using (SqlCommand cmd = new SqlCommand("Query", con))
{
con.Open();
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@EmpId", employeeId);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
var ds = new DataSet();
da.Fill(ds);
string? name = ds.Tables[0].Rows[1]["Variable name"].ToString();
Name.Text =name;
};
}
}
Если вы не хотите указывать тип параметров, вам следует использовать эти функции. Неплохо использовать это, это также мешает нам в Sql-инъекциях.
Другой способ использования функции Add(), которая также содержит тип, о котором я говорил в предыдущем комментарии.
«Неплохо использовать это», это, безусловно, может быть; типы данных, которые он передает, могут быть неправильными и привести к тому, что запрос будет несовместимым с SARG. Это плохо и может быть ужасно для производительности.
Как упоминалось выше в комментариях, у вас много проблем.
вы должны использовать использование с соединением, чтобы избавиться от них.
Вы должны использовать параметризованные запросы, чтобы избежать внедрения SQL.
Поместите свой код в try catch, чтобы вы могли легко определить основную причину проблемы.
Определите строку подключения в файле конфигурации три, чем определение в коде С#.
Вам не нужно выбирать все столбцы. И, пожалуйста, избегайте select *
в запросе, вместо этого просто напишите имя своего столбца, так как вы хотите выбрать здесь только один столбец.
Вы можете использовать ExecuteScalar, он используется, когда вы ожидаете одно значение.
И сначала убедитесь, что текстовое поле имеет ожидаемое значение при вызове этого запроса.
Как уже отмечалось, используйте параметры, и ЛУЧШЕ используйте СТРОГО типизированные параметры.
И нет необходимости использовать набор данных, это одна таблица, поэтому используйте таблицу данных.
таким образом:
string strSQL =
@"select * from ProfessionalDetails where EmpId= @ID";
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.TEST4))
{
using (SqlCommand cmd = new SqlCommand(strSQL, con))
{
con.Open();
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = EmployeeID.Text;
DataTable rstData = new DataTable();
rstData.Load(cmd.ExecuteReader());
if (rstData.Rows.Count > 0)
Name.Text = rstData.Rows[0]["Name"].ToString();
}
}