Можно ли обновить / вставить данные в набор данных с помощью SqlCommand? - PullRequest
1 голос
/ 19 мая 2009

Я использую этот код для обновления данных в таблице базы данных. Можно ли повторно использовать тот же код для обновления набора данных? Спасибо.

 using (SqlConnection cn =  new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString))
        {
            string sql = "UPDATE tbh_Categories SET Title = @Title, 
                           Description = @Description 
                           WHERE CategoryID = @CategoryID";
            SqlCommand cmd = new SqlCommand(sql, cn);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add("@CategoryID", SqlDbType.Int).Value = category.ID;
            cmd.Parameters.Add("@Title", SqlDbType.NVarChar).Value = category.Title;
            cmd.Parameters.Add("@Description", SqlDbType.NVarChar).Value = category.Description;

            cn.Open();
            int ret = cmd.ExecuteNonQuery();

            return (ret == 1);
        }

Ответы [ 4 ]

0 голосов
/ 19 мая 2009

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

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString) 
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers);

        return customers;
    }
}
0 голосов
/ 19 мая 2009

Нет, я так не думаю. Либо зациклите строки вашего DataTable, либо обновите базу данных и перезагрузите.

0 голосов
/ 19 мая 2009

Ответ - нет. Но вы можете использовать DataTable.Select , чтобы идентифицировать строки в DataTable, которые вы хотите обновить. Но тогда вам придется изменить саму фактическую таблицу «вручную».

Я должен спросить, что вы пытаетесь сделать ... вы пытаетесь, например, кэшировать некоторые данные с помощью обновляемого набора данных? Или вы пытаетесь избежать дополнительных поездок в базу данных? Возможно, есть лучший способ сделать то, что вы пытаетесь сделать, если вы сообщите нам об этом. Если вы хотите создать базу данных в памяти, много .

За комментарий: Проверьте SQLite . Существуют .NET Wrappers , которые могут позволить вам делать то, что вы хотите.

0 голосов
/ 19 мая 2009

Точно такой же код? Нет. SqlConnection (и SqlCommand) специфичны для SqlServer. DataSet существует вне этого контекста, поэтому вам придется переписать свой код, чтобы обеспечить возможность обновления DataSet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...