PDA

View Full Version : سوال: نحوه ارسال پارامتر VarBinary به storedprocedure در سی شارپ



ali_55
دوشنبه 11 خرداد 1394, 17:36 عصر
با سلام
یه storedprocedure توی sql دارم 2 تا پارامتر ورودی میگیره اولی از نوع Varchare برای یوزر و دومی از نوع VarBinary برای پسورد برای پارامتر اول مشکلی ندارم ولی برای دومی چطور از طریق textbox یه عدد صحیح دریافت شود و به sql ارسال شود هر روشی توی C# امتحان کردم خطا داد (در مورد تبدیل از نوع صحیح به باینری) ولی با خود sql یوزر و پسورد را که وارد میکنم اطلاعات را نمایش میده که پسورد به صورت هگزادسیمال همون عدد می باشد اگر دوستان راهنمایی کنند ممنون میشم

asman.abi
دوشنبه 11 خرداد 1394, 17:50 عصر
پسورد شما به صورت هگزا دسیمال هست؟!
در نوع varbinary مقادیر به صورت hex ذخیره می شن. برای ارسال مقدار به اون هیچ تفاوتی با مقدار varchar نداره. شما کد C# و کد sql در stored procedure رو بذار ببینم.

ebrahim.rayatparvar
دوشنبه 11 خرداد 1394, 19:07 عصر
سلام مهندس ب
رای مثال کد زیر رو ببین :
برای ذخیره کردن :


cmdb.Parameters.AddWithValue("@text", Encoding.UTF8.GetBytes(textreview.Text));


برای نمایش هم زمانی که داخل datatable ریختی میتونی از کد زیر استفاده کنی :


textreview.Text = Encoding.GetString((byte[])dr["text"]);

ali_55
دوشنبه 11 خرداد 1394, 19:22 عصر
ALTER PROCEDURE [test].[sp_Check]
(
@UserName nvarchar(20),
@Password varbinary(80)
)
AS


BEGIN


Select * from [test].[vw_Pass]
Where UserName=@UserName And Password = @Password


END


این روش هم جواب نداد الان تست کردم

asman.abi
دوشنبه 11 خرداد 1394, 20:17 عصر
شما می خوای اطلاعات رو ارسال کنید. منظورتون درج در پایگاه داده هست؟
پس stored procedure رو این جور باید بنویسی.


ALTER PROCEDURE [test].[sp_Check]
(
@UserName nvarchar(20),
@Password varbinary(80)
)
AS


BEGIN

insert into [test].[vw_Pass] (UserName,Password) values(@UserName,@Password)

END

ali_55
دوشنبه 11 خرداد 1394, 20:44 عصر
برای درج اطلاعات نیست برای چک کردن پسورد هست اگر یوزر و پسورد درست بود یه سری مشخصات را بر میگردونه

asman.abi
دوشنبه 11 خرداد 1394, 21:31 عصر
باید کامل توضیح بدی این جور نمیشه کمک درستی کرد.
کد C# ، خطا هاش کد sql تصویری از برنامه یا خطا

ali_55
سه شنبه 12 خرداد 1394, 08:30 صبح
شما یه مثال بزنید من تست میکنم با تصویرش میزارم
ارسال یه عدد صحیح به sql با نوع varbinary از این روشها استفاده کردم که خطا داد


cmd.Parameters.Add("@Password",SqlDbType.VarBinary).Value= textBox3.Text;
da.InsertCommand.Parameters.AddWithValue("@Password", textBox3.Text);

asman.abi
سه شنبه 12 خرداد 1394, 14:25 عصر
شما یه مثال بزنید من تست میکنم با تصویرش میزارم
ارسال یه عدد صحیح به sql با نوع varbinary از این روشها استفاده کردم که خطا داد


cmd.Parameters.Add("@Password",SqlDbType.VarBinary).Value= textBox3.Text;
da.InsertCommand.Parameters.AddWithValue("@Password", textBox3.Text);


خب به خاطر اینکه همون اول گفتم شما یه پسورد داری که کارکتره (متشکل از حرف یا عدد) خب اینو می خوای بذاری تو var binary . این اشتباه است دیگه. شما چه گیر دادی به varbinary.
اصلا هیچ زمینه ای از varbinary داری؟ تو این نوع باید باینری ذخیره بشه نه مقدار صحیح یا حروف:عصبانی++:
شما ستون پسورد رو باید به nvarchar تغییر بدی. بعد درست میشه.

موفق باشید.

ali_55
سه شنبه 12 خرداد 1394, 15:28 عصر
این به همین شکل بوده الان هم نرم افزار خودش داره کار می کنه من هم نمیتونم تغییرش بدم شاید برای امنیت این کار را کرده پسوردها هم به صورت فقط عدد است حالا اگه راهی داره بگید ممنون میشم

asman.abi
سه شنبه 12 خرداد 1394, 15:42 عصر
مشکل کار شما رو گفتم . تنها تغییر ستون پسورد در sql هست.
برنامه نویسی که به پایگاه دسترسی نداره؟


این به همین شکل بوده الان هم نرم افزار خودش داره کار می کنه من هم نمیتونم تغییرش بدم شاید برای امنیت این کار را کرده پسوردها هم به صورت فقط عدد است حالا اگه راهی داره بگید ممنون میشم
شما پایگاه دادتون از کسی می گیرید!

ali_55
سه شنبه 12 خرداد 1394, 17:16 عصر
شما چه اصراری دارید این یه نرم افرار حسابداریه که چند سال داره کار میکنه حالا می خواهیم یه گزارش اضافه از یه قسمتش تهیه کنیم احتیاج هست کاربر لاگین کنه اگر هم این روش جواب نده باید یه جدول برای یوزر و پسوردها بسازم ولی اون فیلد را نمیشه تغییر داد خود برنامه اصلی مشکل دار میشه

ebrahim.rayatparvar
چهارشنبه 13 خرداد 1394, 09:34 صبح
سلام مهندس
شما برای گزارش کرفتن باید به پایگاه داده نرم افزار فوق لاگین کنید مگه میشه بدون لاگین داده از دریافت کرد.