Четене и актуализиране на данни с помощта на SqlDataAdapter Въпрос

Търся някои примери за това как най-добре да използвам SqlDataAdapter за достъп и актуализиране на данни в моето приложение. В момента имам нещо подобно:

SqlDataAdapter adapter;
DataSet myData = MyDataAccessClass.GetData("Select * from Students", ref adapter);
// change some data here and save changes
adapter.Update();

Всичко това се случва в код отзад и изобщо не ми харесва. И така, опитвам се да намеря начин да направя нещо подобно:

DataSet myData = MyDataAccessClass.GetStudents();
// change some data and save changes
MyDataAccessClass.SaveStudents(myData);

Където методът SaveStudents все още използва SqlDataAdapter за актуализиране на db.

Всички идеи за това как това да работи или някои насоки за най-добри практики за правене на нещо подобно са високо оценени. Благодаря ти.


person chiefanov    schedule 27.05.2011    source източник


Отговори (2)


Това ми изглежда като доста елементарна реализация на слой за достъп до данни. Като цяло го правя нещо подобно:

public class MyDataAccessClass
{
    private string ConnString;

    public MyDataAccessClass()
    { //Get connection string from configuration file }

    public MyDataAccessClass(string connString)
    { ConnString = connString; }

    public DataSet GetAllStudents()
    {
       //your SQL Adapter code here...
    }
}

Една бележка, която бих направил, е, че с толкова много налични ORM решения (включително само Entity Framework и Linq2Sql), може да искате да обмислите използването на колекции от обекти вместо набори от данни за вашите представяния на данни. Тогава можете да имате метод като:

public void CreateUpdateStudent(Student student)
{
    //update database
}

Това е доста субективно, признавам, но намирам, че е за предпочитане пред използването на обикновени набори от данни.

person AllenG    schedule 27.05.2011
comment
Вашият пример е подобен на това, което имам, с изключение на това, че методът GetAllStudents връща реф към sqldataadapter, използван за получаване на данни, и след това се използва в моя UI код отзад, за да правя актуализации. Опитвам се да го променя, така че да нямам sqldataadapters в кода си, защото не мисля, че е правилното място за тях. И в същото време все още трябва да използвам sqldataadapter, за да правя актуализации в моя DAL. - person chiefanov; 27.05.2011
comment
Освен това съм изцяло за Entity Framework и обекти вместо набори от данни, но за съжаление в този конкретен проект нямам опция какво да използвам за моя DAL. - person chiefanov; 27.05.2011
comment
В един момент все пак ще трябва да имате клас, който прави заявки към базата данни. Независимо дали това е директно във вашия код отзад, или в някакъв друг рефериран сборник, няма да промени факта, че НЯКАКВО парче код ще го направи. Обикновено имам отделен проект, наречен SolutionName.DAL (или .DATA), който моят бизнес слой след това препраща. Обикновено мога да го настроя така, че презентационният слой дори да не е наясно с базата данни. - person AllenG; 27.05.2011
comment
Точно така, и моят codebhind има препратка към друг клас, който извършва цялото взаимодействие с базата данни с изключение на актуализациите, които се извършват чрез sqldataadapter в codebehind. Може би се опитвам да направя твърде много, но просто ми се струва, че UI codebehind не е правилното място за sqldataadapter и вместо това трябва да влезе в моя клас за достъп до база данни. - person chiefanov; 27.05.2011
comment
Намерихте ли по-добър отговор? - person zawmn83; 01.08.2013

Ако искате да получите актуализирани данни с помощта на sql-data-adapter, можете да използвате тези

Използване на System.Data.SqlClient;

        SqlConnection con = new SqlConnection("Data Source=abcd-pc;Initial Catalog=user_info;Integrated Security=True");
        SqlDataAdapter da = new SqlDataAdapter();
        try
        {

            da.UpdateCommand = new SqlCommand("Update logindemo set password=@pswd where username=@uname",con);
            da.UpdateCommand.Parameters.Add("@pswd", SqlDbType.VarChar).Value = txtpass.Text;
            da.UpdateCommand.Parameters.Add("@uname", SqlDbType.VarChar).Value = txtusername.Text;
            con.Open();
            da.UpdateCommand.ExecuteNonQuery();
            Label1.Text = "Data Updated";
            con.Close();

        }
        catch
        {
            Label1.Text = "Unable To Connect";
        }

Надявам се, че разбирате как лесно да актуализирате данните. Точно като примера. Можете да използвате този тип примери във Вмъкване в данните и Изтриване на данните с използване на конкретна команда и sql заявка, както се изисква.

person Mitul Patel    schedule 02.02.2012