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

SqlCommand का उपयोग करने के पेशेवरों और विपक्ष सी # में तैयार करें?

MSDN दस्तावेज़ीकरण से:

<ब्लॉकक्वॉट>

"तैयार को कॉल करने से पहले, तैयार किए जाने वाले बयान में प्रत्येक पैरामीटर का डेटा प्रकार निर्दिष्ट करें। प्रत्येक पैरामीटर के लिए जिसमें एक चर लंबाई डेटा प्रकार है, आपको आकार की संपत्ति को अधिकतम आकार की आवश्यकता पर सेट करना होगा। यदि ये शर्तें पूरी नहीं होती हैं तो एक त्रुटि तैयार करें।

यदि आप तैयार को कॉल करने के बाद एक निष्पादन विधि को कॉल करते हैं, तो कोई भी पैरामीटर मान जो आकार संपत्ति द्वारा निर्दिष्ट मान से बड़ा होता है, स्वचालित रूप से पैरामीटर के मूल निर्दिष्ट आकार में छोटा कर दिया जाता है, और कोई ट्रंकेशन त्रुटि वापस नहीं आती है।

आउटपुट पैरामीटर (चाहे तैयार किया गया हो या नहीं) में उपयोगकर्ता द्वारा निर्दिष्ट डेटाटाइप होना चाहिए। यदि आप एक चर लंबाई डेटा प्रकार निर्दिष्ट करते हैं, तो आपको अधिकतम आकार भी निर्दिष्ट करना होगा।"

इसके अलावा, "यदि CommandTypeproperty TableDirect पर सेट है, तो तैयार कुछ भी नहीं करता है। यदि CommandTypeis StoredProcedure पर सेट है, तो Prepare को कॉल सफल होना चाहिए, ..."

यह सामान्य रूप से यह सुनिश्चित करने के लिए उपयोग किया जाता है कि अंतिम उपयोगकर्ता SQL इंजेक्शन तकनीक का उपयोग उस जानकारी को जोड़ने या हटाने के लिए नहीं कर रहा है जिसे आप डेटाबेस से भी नहीं चाहते हैं।

मैंने इस पर गौर किया और इस लेख को http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.prepare.aspx देखें। आपकी समस्या यह है कि आपको .Prepare() चलाने से पहले अपने पैरामीटर को परिभाषित करने की आवश्यकता है और फिर .Prepare() चलाने के बाद अपने पैरामीटर सेट करें। अभी तुम दोनों पहले कर रहे हो। मैं कुछ इस तरह की कोशिश करूंगा (ध्यान दें कि मैंने इसका परीक्षण नहीं किया है, इसलिए मेरा सिंटैक्स थोड़ा हटकर हो सकता है)।

public static decimal pobierzBenchmarkKolejny(string varPortfelID, DateTime data, decimal varBenchmarkPoprzedni, decimal varStopaOdniesienia) {
    const string preparedCommand = @"SELECT [dbo].[ufn_BenchmarkKolejny](@varPortfelID, @data, @varBenchmarkPoprzedni,  @varStopaOdniesienia) AS 'Benchmark'";
    using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) //if (varConnection != null) {
    using (var sqlQuery = new SqlCommand(preparedCommand, varConnection)) {

        sqlQuery.Parameters.Add("@varPortfelID");
        sqlQuery.Parameters.Add("@varStopaOdniesienia");
        sqlQuery.Parameters.Add("@data");
        sqlQuery.Parameters.Add("@varBenchmarkPoprzedni");

        sqlQuery.Prepare();
        sqlQuery.ExecuteNonQuery();//This might need to be ExecuteReader()

        sqlQuery.Parameters[0].Value = varPortfelID;
        sqlQuery.Parameters[1].Value = varStopaOdniesienia;
        sqlQuery.Parameters[2].Value = data;
        sqlQuery.Parameters[3].Value = varBenchmarkPoprzedni;

        using (var sqlQueryResult = sqlQuery.ExecuteReader())
            if (sqlQueryResult != null) {
                while (sqlQueryResult.Read()) {

                }
            }
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL का उपयोग करके SQL सर्वर में डेटाबेस का नाम कैसे बदलें

  2. एकाधिक कॉलम का SQL MAX?

  3. SQL सर्वर में सप्ताह का पहला दिन प्राप्त करें

  4. SQL सर्वर में OBJECTPROPERTY () का उपयोग करके जांचें कि क्या कोई ऑब्जेक्ट एक संग्रहीत प्रक्रिया है

  5. SqlDataSourceEnumerator.Instance.GetDataSources() स्थानीय SQL सर्वर 2008 आवृत्ति का पता नहीं लगाता है