एक्सेस डेटाबेस के साथ C# समस्या


मैं इस क्वेरी को एसक्यूएल सर्वर के बजाय सी# और एक्सेस डेटाबेस द्वारा कैसे बना सकता हूं
मेरा मतलब है, मैं मैक्स फ़ंक्शन के साथ शून्य मान को 1 से कैसे बदल सकता हूं

सी#
public Int64 GetAccCode(Int64 Result,FRMAccounts xx)
{
    DataTable dt = new DataTable();             
    dt.Clear();             
    SqlDataAdapter da = new SqlDataAdapter();            
    da = new SqlDataAdapter("select isnull(MAX( AccCode),1) from Accounts where AccParent = " + Result + " ", ConClass.con);             
    da.Fill(dt);              
    Int64 MyNewID;             
    MyNewID = Convert.ToInt64(dt.Rows[0][0]);

    if (xx.AccType.SelectedIndex == 0)
    {
        if (MyNewID ==1)
        {
            MyNewID = int.Parse(Result.ToString() + "0".ToString() + 1);
        }
        else
        {
            MyNewID = (Convert.ToInt64(dt.Rows[0][0]) + 1);
        }
    }
    else if (xx.AccType.SelectedIndex == 1)
    {
        if (MyNewID ==1)
        {
            MyNewID = int.Parse(Result.ToString() + "0".ToString() + "0".ToString() + "0".ToString() + 1);
        }
        else
        {
            MyNewID = (Convert.ToInt64(dt.Rows[0][0]) + 1);
        }
    }

    return MyNewID;
    da.Dispose();            
    dt.Dispose();
}

मैंने क्या प्रयास किया है:

मैं शून्य मान को 1 से बदलने का प्रयास करता हूँ
अधिकतम फ़ंक्शन में.

समाधान 1

आपके कोड में कुछ समस्याएं और संभावित सुधार की आवश्यकता है
1. SQL Injection Vulnerability:

कोड सीधे परिणाम चर को SQL क्वेरी स्ट्रिंग में जोड़ता है, जिससे SQL इंजेक्शन कमजोरियाँ हो सकती हैं। इसे रोकने के लिए आपको पैरामीटरयुक्त क्वेरी का उपयोग करना चाहिए।

सी#
da = new SqlDataAdapter("SELECT ISNULL(MAX(AccCode),1) FROM Accounts WHERE AccParent = @Result", ConClass.con);
da.SelectCommand.Parameters.AddWithValue("@Result", Result);

Unused Code:

Da.Dispose() और dt.Dispose() लाइनें कभी निष्पादित नहीं की जाएंगी क्योंकि वे रिटर्न स्टेटमेंट के बाद हैं। संसाधनों का उचित निपटान सुनिश्चित करने के लिए उपयोग कथन का उपयोग करना बेहतर है। यहां आपके कोड का अद्यतन संस्करण है:

सी#
public Int64 GetAccCode(Int64 Result, FRMAccounts xx)
{
    DataTable dt = new DataTable();
    using (SqlDataAdapter da = new SqlDataAdapter("SELECT ISNULL(MAX(AccCode),1) FROM Accounts WHERE AccParent = @Result", ConClass.con))
    {
        da.SelectCommand.Parameters.AddWithValue("@Result", Result);
        da.Fill(dt);
    }
    Int64 MyNewID = Convert.ToInt64(dt.Rows[0][0]);
    if (MyNewID == 1)
    {
        MyNewID = Int64.Parse($"{Result}{"0".PadLeft(xx.AccType.SelectedIndex * 2, '0')}1");
    }
    else
    {
        MyNewID = MyNewID + 1;
    }
    return MyNewID;
}

एक्सेस डेटाबेस में, NZ फ़ंक्शन का उपयोग आमतौर पर शून्य मानों को किसी अन्य निर्दिष्ट मान से बदलने के लिए किया जाता है। इसके अतिरिक्त, एक्सेस SQL ​​सर्वर जैसे नामित पैरामीटर का समर्थन नहीं करता है, इसलिए आपको इसका उपयोग करने की आवश्यकता होगी? क्वेरी में पैरामीटर के लिए प्लेसहोल्डर के रूप में। यहां बताया गया है कि आप एक्सेस डेटाबेस के लिए अपना कोड कैसे संशोधित कर सकते हैं:

सी#
public Int64 GetAccCode(Int64 Result, FRMAccounts xx)
{
    DataTable dt = new DataTable();
    using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT NZ(MAX(AccCode), 1) FROM Accounts WHERE AccParent = ?", ConClass.con))
    {
        da.SelectCommand.Parameters.AddWithValue("@Result", Result);
        da.Fill(dt);
    }
    // Rest of your code
}

コメント

タイトルとURLをコピーしました