[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]
コメント