Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

.NET से क्या मैं SqlCommand ऑब्जेक्ट (SQL पैरामीटर्स के साथ) द्वारा उत्पन्न पूर्ण SQL स्ट्रिंग प्राप्त कर सकता हूं?

सभी पैरामीटर नामों को उनके मानों से बदलने वाला एक साधारण लूप आपको अंतिम परिणाम के समान कुछ प्रदान करेगा, लेकिन कई समस्याएं हैं।

  1. चूंकि SQL को वास्तव में कभी भी पैरामीटर मानों का उपयोग करके दोबारा नहीं बनाया जाता है, इसलिए न्यूलाइन्स और कोट्स जैसी चीजों पर विचार करने की आवश्यकता नहीं है
  2. टिप्पणियों में पैरामीटर नामों को वास्तव में उनके मूल्य के लिए संसाधित नहीं किया जाता है, लेकिन जैसा है वैसा ही छोड़ दिया जाता है

उन लोगों के साथ, और उन पैरामीटर नामों को ध्यान में रखते हुए जो समान वर्णों से शुरू होते हैं, जैसे @NAME और @NAME_FULL , हम सभी पैरामीटर नामों को उस मान से बदल सकते हैं जो उस पैरामीटर के स्थान पर होगा:

string query = cmd.CommandText;
foreach (SqlParameter p in cmd.Parameters.OrderByDescending(p => p.ParameterName.Length))
{
    query = query.Replace(p.ParameterName, p.Value.ToString());
}

हालाँकि, इसके साथ एक समस्या बची है, और वह यह है कि यदि कोई पैरामीटर एक स्ट्रिंग है, तो SQL जो शुरू में इस तरह दिखता है:

SELECT * FROM yourtable WHERE table_code = @CODE

इस तरह दिखेगा:

SELECT * FROM yourtable WHERE table_code = SOME CODE WITH SPACES

यह स्पष्ट रूप से कानूनी SQL नहीं है, इसलिए हमें कुछ पैरामीटर-प्रकारों को भी ध्यान में रखना होगा:

DbType[] quotedParameterTypes = new DbType[] {
    DbType.AnsiString, DbType.Date,
    DbType.DateTime, DbType.Guid, DbType.String,
    DbType.AnsiStringFixedLength, DbType.StringFixedLength
};
string query = cmd.CommandText;

var arrParams = new SqlParameter[cmd.Parameters.Count];
cmd.Parameters.CopyTo(arrParams, 0);

foreach (SqlParameter p in arrParams.OrderByDescending(p => p.ParameterName.Length))
{
    string value = p.Value.ToString();
    if (quotedParameterTypes.Contains(p.DbType))
        value = "'" + value + "'";
    query = query.Replace(p.ParameterName, value);
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विकल्प के साथ अनंत लूप सीटीई (अधिकतम 0)

  2. कैसे पता लगाएं कि स्ट्रिंग में कम से कम एक संख्या है या नहीं?

  3. एन्क्रिप्टेड कनेक्शन SQL सर्वर के लिए प्रमाणपत्र परिनियोजित करना

  4. SQL सर्वर से कनेक्शन स्थापित करते समय त्रुटि हुई

  5. एसक्यूएल सर्वर डेटटाइम ऑब्जेक्ट को बिगिनट (नेट टिक) में कनवर्ट करें