В настоящее время я изучаю веб-разработчик и изучаю ASP.NET WEBFORMS. У меня есть вопрос относительно DataAdapter и Обновление/Удаление таблицы.DataAdapter, какой метод обновления?
Я хочу знать, что это правильный способ сделать это. Допустим, у меня есть этот метод.
Метод обновления
public void UpdateDataTable()
{
SqlConnection conn = new SqlConnection(strcon);
SqlDataAdapter da = null;
DataSet ds = null;
DataTable dt = null;
string sqlsel = "SELECT ActId, Title FROM Act WHERE ArtistId = " + Session["UserId"];
try
{
da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(sqlsel, conn);
ds = new DataSet();
da.Fill(ds, "MyTable");
dt = ds.Tables["MyTable"];
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
catch (Exception ex)
{
LabelMessage.Text = ex.Message;
}
finally
{
conn.Close();
}
}
Я называю этот метод, когда на страницы загружаются в (!Page.IsPostBack)
. Поэтому мой вопрос заключается в том, что DataSet сохраняет все в памяти (DataTable тоже). И я хочу снова обновить одну строку с объектом DataAdapter, какой метод лучше всего использовать? В событии клика.
Метод 1
protected void ButtonUpdate_Click1(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(strcon);
SqlDataAdapter da = null;
string sqlupd = "UPDATE [Act] SET [Title] = @Title, [Description] = @Description, [Duration] = @Duration WHERE [ActId] = @ActId";
try
{
conn.Open();
da = new SqlDataAdapter();
da.UpdateCommand = new SqlCommand(sqlupd, conn);
da.UpdateCommand.Parameters.AddWithValue("@Title", TextBoxTitle.Text);
da.UpdateCommand.Parameters.AddWithValue("@Description", TextBoxText.Text);
da.UpdateCommand.Parameters.AddWithValue("@Duration", TextBoxDuration.Text);
da.UpdateCommand.Parameters.AddWithValue("@ActId", LabelID.Text);
da.UpdateCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
LabelMessage.Text = "" + ex.Message;
}
finally
{
conn.Close();
}
// Call the Update Method
UpdateDataTable();
}
Или лучше, чтобы заполнить все снова, и поместить его в DataSet -> DataTable? Как это.
Метод 2
protected void ButtonUpdate_Click1(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(strcon);
SqlDataAdapter da = null;
DataSet ds = null;
DataTable dt = null;
SqlCommand cmd = null;
string sqlsel = "SELECT * FROM Act WHERE ArtistId = " + Session["UserId"];
string sqlupd = "UPDATE [Act] SET [Title] = @Title, [Description] = @Description, [Duration] = @Duration WHERE [ActId] = @ActId";
try
{
da = new SqlDataAdapter();
da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(sqlsel, conn);
ds = new DataSet();
da.Fill(ds, "MyTable");
dt = ds.Tables["MyTable"];
dt.Rows[Gridview1.SelectedIndex]["Title"] = TextBoxTitle.Text;
dt.Rows[Gridview1.SelectedIndex]["Description"] = TextBoxText.Text;
dt.Rows[Gridview1.SelectedIndex]["Duration"] = TextBoxDuration.Text;
// UPDATE
cmd = new SqlCommand(sqlupd, conn);
cmd.Parameters.Add("@Title", SqlDbType.NVarChar, 50, "Title");
cmd.Parameters.Add("@Description", SqlDbType.Text, 250, "Description");
cmd.Parameters.Add("@Duration", SqlDbType.Int, 4, "Duration");
SqlParameter parm = cmd.Parameters.Add("@ActId", SqlDbType.Int, 4, "ActId");
parm.SourceVersion = DataRowVersion.Original;
da.UpdateCommand = cmd;
da.Update(ds, "MyAct");
}
catch (Exception ex)
{
LabelMessage.Text = "" + ex.Message;
}
finally
{
conn.Close();
}
UpdateDataTable();
;
}
Так какой метод лучше всего использовать? И почему? :)
Почему веб-формы ?! В любом случае, ваши данные должны появляться в виде сервиса, т. Е. Вы не получаете доступ к db из пользовательского интерфейса, страницы позади. А это означает, что наборы данных и не являются вашим лучшим выбором. Если вы учитесь, по крайней мере, попытайтесь изучить хорошие практики с самого начала, гораздо труднее изменить свои привычки позже – MikeSW
Спасибо за ответ MikeSW! Ну почему веб-формы? Я задал себе тот же вопрос, но это часть учебного плана. Поэтому мы вынуждены это изучить, после этого семестра я рассмотрю .NET MVC :) Но это на самом деле из школьного проекта (уже доставлено), и одна из целей заключалась в том, что вы должны использовать DataAdapter, я знаю, что в этом случае DataReader для чтения таблицы и простой команды с ExecuteNonQuery мог бы работать лучше, так как я работаю только с одной таблицей. – Sigils
Если это для школы, не волнуйтесь, надеюсь, вам это не понадобится в реальном мире. – MikeSW