PDA

View Full Version : سوال: اجرا نشدن SP در VB6



ali190
چهارشنبه 05 مرداد 1390, 20:30 عصر
با سلام و عرض خسته نباشید
من در دیتابیس SQL Server ام یک select sp ساده به شرح زیر دارم نام aaa : sp

CREATE PROCEDURE aaa
@a varchar(50)
AS
select * from table3
where a=@a
GO

حالا میخوام از طریق vb6 این sp رو اجرا و RecordCount کنم

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As ADODB.Command
Dim strconnect As String
Public SQLQuery As String

Private Sub Command1_Click()
Set cmd = New ADODB.Command
cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "aaa"
cmd.Parameters.Append cmd.CreateParameter("a", adVarChar, adParamInput, 50, Text1.Text)
Set rs = cmd.Execute
MsgBox rs.RecordCount
Set cmd.ActiveConnection = Nothing
End Sub

Private Sub Form_Load()
strconnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=milad;Data Source=."
con.Open strconnect
End Sub

ولی همش هنگام RecordCount مقدار 1- را دریافت میکنم
ممنون میشم کمکم کنید
یاعلی

ali190
پنج شنبه 06 مرداد 1390, 22:40 عصر
سلام
دوستان مشکل از sp هست یا کدهای vb؟

mpmsoft
جمعه 07 مرداد 1390, 11:16 صبح
در خصوص نحوه نوشتن کدها باید بگم خدمتتون 100% نوشتن این سبک کدها اشتباه است و فقط حجم کدهاتونو می برید بالا.همیشه بدنبال ساده ترین و سریعترین و امن ترین روش باشید
اولا در نوشتن پروسیجرها دقت کنید استفاده از پروسیجرها بیشتر در فرمولهای محاسباتی استفاده می شود که اصطلاحا می گن Server Side و بیشتر در بحث وب و امن کردن ورودی کاربران و جلوگیری از Injection ها استفاده می شه که تا حد زیاد استفاده ORM ها ارتباط شما رو با بانک اطلاعاتی و ارسال مقادیر و دستورات به بانک بهینه می کند

برای Select - Update - Delete لزومی نداره شما sp بنویسید
برای دست آورد تعداد رکود شما به سادگی می تونید مثل کد زیر عمل کنید


Dim Conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset

Conn.Open "....."
Rs.Open "SELECT Count(*) FROM TblName",Conn,0,1

Msgbox Rs(0)


مشکل کد بالا هم ظاهرا برای این هست که شما Conn.CursorLocation رو بعد از باز کردن بانک مشخص نکردید

ASKaffash
شنبه 15 مرداد 1390, 10:10 صبح
با سلام
جناب ali190 پیرو پیام خصوصی لطفا به موارد ذیل اشاره می شود :
1- از دیدگاه بانک اطلاعاتی :
یک SP یک برنامه به زبان بانک اطلاعاتی (اس کیوال سرور / اراکل / ....) است که میتواند یک جدول بازگشتی و حتی به همراه آن یک مقدار رانیز منعکس کند از نظر امنیت به خصوص برای نوع حملات SQLInjection استفاده از SP بسیار مناسب است همچنین سرعت اجرا / مستقل بودن از سورس کد برنامه / یکبار کامپایل شدن / .... بسیار با ارزش است
2- از دیدگاه برنامه کاربردی :
با هر زبان برنامه نویسی و با هر تکنولوژی (مثل ADO , ADO.NET و BDE و ODBC و ...) ارتباط با بانک اطلاعاتی ؛ تقریبا نوع تعامل ثابت است همواره علاوه بر رشته ارتباطی و پارامترهای ارتباطی یک دستور اجرا (مثل CommandText / SQLCommand / ... ) وجود دارد که
میتواند یک دستور Select‌یا یک SP و یا هر خط فرمان دیگری که قابل اجرا توسط RDBMS باشد را شامل گردد که توسط یک Provider ارتباط با RDBMS را میسر می سازد علیهذا :
همیشه نیاز نیست که یک SP به تنهائی و پارامترها توسط متدهای مربوطه ایجاد و سپس اجرا شوند بلکه خطی مثل :
MySp 10,'Hello'
نیز میتواند مستقیما در خط فرمان توسط Provider به سمت RDBMS ارسال گردد و RDBMS تشخیص یک SP به همراه پارامترهای ورودی را خواهد داد
سعی کردم خلاصه بگویم باز اگر سئوالی باشد در خدمت هستم