यह अपवाद क्यों फेंकता है?


SQL सर्वर में, मैंने यह स्प्रोक बनाया:

एसक्यूएल
CREATE PROCEDURE [dbo].[GetOutletInfo] 
@PermitID int
AS SELECT * FROM Outlets WHERE PermitID=@PermitID
GO

फिर अपने C# कोड में, मैं इसे चलाता हूं:

सी#
var cn = new SqlConnection(connectionString);
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter("GetOutletInfo", cn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@PermitID", SqlDbType.Int).Value = PermitID;
da.Fill(ds, "GetOutletInfo");

निष्पादन पर, da.Fill इस अपवाद को फेंकता है:

System.FormatException
HRपरिणाम=0x80131537
संदेश=पैरामीटर मान को स्ट्रिंग से Int32 में परिवर्तित करने में विफल।
स्रोत=सिस्टम.डेटा.एसक्यूएलक्लाइंट

मैंने गूगल पर घंटों तक अलग-अलग चीजें खोजकर अपना सिर खुजलाया, लेकिन कोई सफलता नहीं मिली। किसी भी संकेत या अंतर्दृष्टि की सराहना की जाएगी। धन्यवाद

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

This query works (since it does not need a parameter)
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter("GetInspectionLettersQueue", cn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.Fill(ds, "GetInspectionLettersQueue");

मैंने Parameters.Add कमांड में जोड़ने से पहले पैरामीटर को int32 में कास्ट करने का प्रयास किया जो काम नहीं आया।

समाधान 1

ख़ैर, मुझे लगता है कि मुझे और कॉफ़ी की ज़रूरत है। यह पता चला कि PermitID एक स्ट्रिंग थी, लेकिन इसे “foo” पर सेट किया गया था – ओह – कोई आश्चर्य नहीं – देखने के लिए धन्यवाद, एक बार जब मैंने इसे “42” पर सेट किया तो यह काम कर गया।

मुझे भी नहीं लग रहा

समाधान 2

यदि मुझे अपना एसक्यूएल याद है, तो सभी पैरामीटर प्रकार स्ट्रिंग होने चाहिए, पूर्णांक नहीं। उसकी कोशिश करो।

コメント

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