C# .NET4.0 TableAdapter.Update() नवीन रेकॉर्ड टाकणार नाही

माझ्याकडे एक लहान अॅप्लिकेशन आहे ज्यामध्ये DAL, BLL आणि अॅप्लिकेशन हे सर्व वेगवेगळ्या प्रोजेक्ट्समध्ये व्हिज्युअल स्टुडिओ 2010 मध्ये एकाच सोल्यूशन अंतर्गत आहेत.

माझे DAL डेटाबेसची चौकशी करण्यासाठी xsd फाइल वापरत आहे आणि माझ्या BLL कडे DAL कडून माहिती मिळवण्यासाठी आणि त्यासह सामग्री करण्यासाठी पद्धती आहेत.

सध्या मी BLL मधील मेथडवर कॉल करण्यासाठी ऍप्लिकेशनच्या मागे असलेला कोड वापरून रेकॉर्ड टाकण्याचा प्रयत्न करत आहे जे नंतर DAL च्या xsd फाइलमध्ये तयार केलेल्या Tableadapter.Update() पद्धतीचा वापर करून रेकॉर्ड टाकण्याचा प्रयत्न करते.

मी आधीच कोणतीही अडचण नसताना रेकॉर्ड निवडू आणि अपडेट करू शकतो, परंतु मी रेकॉर्ड समाविष्ट करू शकत नाही.

माझ्या माहितीनुसार TableAdapter.Update() पद्धतीला नवीन पंक्ती दिल्यास नवीन रेकॉर्ड समाविष्ट करणे माहित असले पाहिजे, तथापि ते 0 चे मूल्य परत करत आहे - म्हणजे 0 पंक्ती प्रभावित झाल्या आहेत, त्यामुळे ते कार्य करत नाही.

मी ज्या टेबलमध्ये टाकण्याचा प्रयत्न करत आहे त्याला tblRoles म्हणतात.

त्यात एक 'आयडी' स्तंभ आहे, जो एक इंट, प्राथमिक की आणि ओळख स्तंभ आहे. यात एक 'नाव' स्तंभ आहे जो nvarchar(50) घेतो, आणि त्यात 4 'CanAdduser' इत्यादी स्तंभ आहेत जे बिटचा प्रकार घेतात.

हा माझा कोड आहे:

APP कोड मागे:

protected void CreateRole(object sender, EventArgs e) {
    RolesBL roles = new RolesBL();

    roles.CreateRole(NewRoleName.Text);

    RolesGridView.DataBind();
}

BLL:

private tblRolesTableAdapter adapter = new tblRolesTableAdapter();

public bool CreateRole(string Name) {
    CMSDS.tblRolesDataTable roles = new CMSDS.tblRolesDataTable();
    CMSDS.tblRolesRow row = roles.NewtblRolesRow();

    row.Name = Name;
    row.CanAddUsers = false;
    row.CanEditUsers = false;
    row.CanSuspendUsers = false;
    row.CanChangeUserPasswords = false;

    int result = adapter.Update(row);

    if(result == 1) {
        return true;
    }

    return false;
}

मला जे समजले त्यावरून टेबलमध्ये एक नवीन पंक्ती समाविष्ट केली पाहिजे, परंतु adapter.Update(row) 0 परत करत राहते आणि मला का माहित नाही.

जेव्हा मी डीबग करतो तेव्हा मी पाहू शकतो की सर्व पंक्ती स्तंभांना योग्य मूल्ये नियुक्त केली गेली आहेत आणि कोणत्याही त्रुटी टाकल्या जात नाहीत.

कोणत्याही मदतीचे कौतुक केले जाईल!

संपादित करा:

मी हे नमूद करायला विसरलो की जेव्हा मी xsd फाईलमध्ये डीफॉल्ट Fill,GetData() क्वेरी कॉन्फिगर केली तेव्हा मी खात्री केली की ते इन्सर्ट, अपडेट आणि डिलीट स्टेटमेंट्स स्वयंचलितपणे व्युत्पन्न करते.


person Lucas    schedule 17.07.2011    source स्रोत


उत्तरे (1)


तुम्ही DataTable मध्ये नवीन भूमिका-पंक्ती जोडलेली नाही.

CMSDS.tblRolesDataTable roles = new CMSDS.tblRolesDataTable();
CMSDS.tblRolesRow row = roles.NewtblRolesRow();
row.Name = Name;
roles.AddtblRolesRow(row); 
int result = adapter.Update(roles); //the same as `adapter.Update(row)`
person Tim Schmelter    schedule 17.07.2011
comment
+1; हे माझ्या उत्तरापेक्षा अधिक अर्थपूर्ण आहे. असे दिसते की इतर (सिंगल टेबल?) उदाहरणे AcceptChanges कॉल करत नाहीत. - person Merlyn Morgan-Graham; 18.07.2011
comment
हुशार! तुम्ही माझी खूप निराशा वाचवलीत :) धन्यवाद! खरे सांगायचे तर, हे सर्व कसे कार्य करते याची मला खात्री नव्हती म्हणून मला हे देखील माहित नव्हते की Add~Row() पद्धत अस्तित्वात आहे. - person Lucas; 18.07.2011
comment
@Merlyn: adapter.Update स्पष्टपणे AcceptChanges ला कॉल करेल. msdn.microsoft.com/en-us/ लायब्ररी/ - person Tim Schmelter; 18.07.2011