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

Sql सर्वर कॉम्पैक्ट संस्करण में LIKE के साथ पैरामीटर का उपयोग कैसे करें

संक्षिप्त उत्तर यह है कि आपको वाइल्डकार्ड को पैरामीटर के मान में रखना चाहिए, कमांडटेक्स्ट में नहीं। यानी

वह नहीं:sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode%"

यह:

sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode";
sqlCommand.Parameters.Add("@postcode", SqlDbType.NVarChar).Value = postCode + "%";

यहां लंबा जवाब:

मैं वापस गया और अपने कोड को अनिवार्य रूप से हटा दिया ताकि मैं इसे यहां पोस्ट कर सकूं, और ऐसा करते समय मैंने पाया कि मेरे मूल प्रश्न में मैंने जो आखिरी तरीका आजमाया था वह वास्तव में काम करता है। मेरे परीक्षण में कुछ गलत रहा होगा। तो यहां एक सारांश दिया गया है, जिसमें पूरा कोड चलाया गया है:

मूल गतिशील sql, sql इंजेक्शन के प्रति संवेदनशील:

//Dynamic sql works, returns 2 results as expected, 
//but I want to use parameters to protect against sql injection

string postCode = "G20";
sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE '" 
                         + postCode + "%'";
return Database.fGetDataSet(sqlCommand, 
                            iiStartRecord, 
                            iiMaxRecords, 
                            "JOBVISIT");

पैरामीटर का उपयोग करने का पहला प्रयास त्रुटि देता है:

//This syntax with a parameter gives me an error 
//(note that I've added the NVarChar length as suggested:
//System.FormatException : @postcode : G20 - 
//Input string was not in a correct format.
//at System.Data.SqlServerCe.SqlCeCommand.FillParameterDataBindings()
//at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr& pCursor,
// Boolean& isBaseTableCursor)

string postCode = "G20";
sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode 
                         + '%'";
sqlCommand.Parameters.Add("@postcode", 
                          SqlDbType.NVarChar, 
                          10).Value = postCode;
return Database.fGetDataSet(sqlCommand, iiStartRecord, iiMaxRecords, "JOBVISIT");

दूसरी तकनीक वास्तव में काम करती है:

///This syntax with a parameter works, returns 2 results as expected
string postCode = "G20";
sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode";
sqlCommand.Parameters.Add("@postcode", SqlDbType.NVarChar).Value = postCode 
                                                                   + "%";
return Database.fGetDataSet(sqlCommand, iiStartRecord, iiMaxRecords, "JOBVISIT");

सभी इनपुट के लिए धन्यवाद, और मूल भ्रामक प्रश्न के लिए खेद है...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर लॉगिन त्रुटि:उपयोगकर्ता 'NT AUTHORITY\SYSTEM' के लिए लॉगिन विफल

  2. SQL सर्वर डेटाबेस (T-SQL) को पुनर्स्थापित करें

  3. पेंटाहो डेटा इंटीग्रेशन और बीए सर्वर टूल्स में माइक्रोसॉफ्ट एसक्यूएल सर्वर जेडीबीसी ड्राइवर्स स्थापित करना

  4. एक इकाई फ़ील्ड को कैसे मैप करें जिसका नाम जेपीए में आरक्षित शब्द है

  5. SQL सर्वर यदि मौजूद नहीं है तो उपयोग करें?