لماذا هذا رمي استثناء

[ad_1]

في خادم SQL، قمت بإنشاء هذا sproc:

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
HRResult=0x80131537
الرسالة = فشل تحويل قيمة المعلمة من سلسلة إلى Int32.
المصدر=System.Data.SqlClient

لقد بحثت في جوجل وخدشت رأسي لساعات في تجربة أشياء مختلفة، دون نجاح. سيكون موضع تقدير أي مؤشرات أو البصيرة. شكرًا لك

ما حاولت:

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");

لقد حاولت إرسال المعلمة إلى int32 قبل إضافتها إلى أمر Parameters.Add الذي لم ينجح.

الحل 1

حسنًا، أعتقد أنني بحاجة إلى المزيد من القهوة. اتضح أن PermitID كان عبارة عن سلسلة، ولكن تم ضبطه على “foo” – دوه – لا عجب – شكرًا على البحث عندما قمت بتعيينه على “42” وقد نجح.

أنا لا أشعر أيضا

الحل 2

إذا كنت أتذكر SQL الخاص بي، فيجب أن تكون جميع أنواع المعلمات عبارة عن سلسلة، وليس عددًا صحيحًا. جرب ذلك.

[ad_2]

コメント

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