نوع پارامتر بازگشتی از پروسیجر sql به C#.net
سلام بر دوستان عزیز؛
من با پروسیجر sql هم بوسیله output و هم بوسیله return مقدار به سی شارپ بر میگردونم ولی با اینکه همه تعاریف از نوع nvarchar و string هستش، ولی بازم موقع برگردوندن پیغام میده که نمیتونه از nvarchar به int تبدیل کنه. چون تو مقدار بازگشتی از متن استفاده کردم.
سوالم اینکه که آیا فقط از پروسیجرهای sql میشه مقدار int برگردونیم؟ آیا نمیشه مقدار string برگردونیم و تو برنامه استفاده کنیم؟
با سپاس
نقل قول: نوع پارامتر بازگشتی از پروسیجر sql به C#.net
با سلام
بله میشه مقدار string برگردوند و با همین output هم میشه
در صورت تمایل نمونه برنامه قرار بدید تا بررسی بشه
موفق باشید
نقل قول: نوع پارامتر بازگشتی از پروسیجر sql به C#.net
نقل قول: نوع پارامتر بازگشتی از پروسیجر sql به C#.net
حتی تمام موارد رو به string و nvarchar تبدیل کردم بازم همینه
نقل قول: نوع پارامتر بازگشتی از پروسیجر sql به C#.net
نقل قول:
نوشته شده توسط
danialafshari
با سلام
بله میشه مقدار string برگردوند و با همین output هم میشه
در صورت تمایل نمونه برنامه قرار بدید تا بررسی بشه
موفق باشید
کد sql
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter PROCEDURE sp_CheckUsernamePassword
@username nvarchar(100),
@password nvarchar(max) ='',
@UserID int output
AS
BEGIN
SET NOCOUNT ON;
SELECT top 1 @password = [Password], @UserID =[User_ID] FROM [OstSMS].[dbo].[Users] where UserName =@username
return convert(nvarchar(max),@password)
END
GO
کد سی شارپ
string GetPassword;
int GetUserID;
string Check_Result;
string Password = "123";
int UserID = 0;
SqlCommand Cmd = new SqlCommand("sp_CheckUsernamePassword", con);
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.CommandText = "sp_CheckUsernamePassword";
Cmd.Parameters.AddWithValue("@username", "Admin");
// SqlParameter sqlParam_password = new SqlParameter("@password", DbType.String);
SqlParameter sqlParam_UserID = new SqlParameter("@UserID", DbType.Int32);
//sqlParam_password.Direction = ParameterDirection.Output;
sqlParam_UserID.Direction = ParameterDirection.Output;
//Cmd.Parameters.Add(sqlParam_password);
Cmd.Parameters.Add(sqlParam_UserID);
con.Open();
Cmd.ExecuteNonQuery();
Cmd.ExecuteScalar();
GetPassword = (string)Cmd.ExecuteScalar();
con.Close();
// GetPassword = (string)Cmd.Parameters["@password"].Value;
MessageBox.Show(GetPassword);
GetUserID = (int)Cmd.Parameters["@UserID"].Value;
using (MD5 md5Hash = MD5.Create())
{
string hash = GetMd5Hash(md5Hash, Password);
if (VerifyMd5Hash(md5Hash, Password, GetPassword))
{
Check_Result = "true";
UserID = GetUserID;
}
else
{
Check_Result = "false";
}
}
پیغام خطا:
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Additional information: Conversion failed when converting the nvarchar value '202cb962ac59075b964b07152d234b70' to data type int.
نقل قول: نوع پارامتر بازگشتی از پروسیجر sql به C#.net
سلام
به اینصورت اصلاح بفرمائید
Stored Procedure
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE sp_CheckUsernamePassword
@username nvarchar(100),
@password nvarchar(max) output,
@UserID int output
AS
BEGIN
SET NOCOUNT ON;
SELECT top 1 @password = [Password], @UserID =[User_ID] FROM [OstSMS].[dbo].[Users] where UserName = @username
END
GO
کدتون هم به اینصورت
string Check_Result;
string Password = "123";
int UserID = 0;
var cmd = new SqlCommand("sp_CheckUsernamePassword", con)
{
CommandType = CommandType.StoredProcedure,
CommandText = "sp_CheckUsernamePassword"
};
cmd.Parameters.AddWithValue("@Username", "Admin");
cmd.Parameters.Add("@Password", SqlDbType.NVarChar, -1).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@UserId", SqlDbType.NVarChar, -1).Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
var getPassword = cmd.Parameters["@Password"].Value.ToString();
var getUserId = Convert.ToInt32(cmd.Parameters["@UserId"].Value);
con.Close();
MessageBox.Show(getPassword);
using (MD5 md5Hash = MD5.Create())
{
string hash = GetMd5Hash(md5Hash, Password);
if (VerifyMd5Hash(md5Hash, Password, getPassword))
{
Check_Result = "true";
UserID = getUserId;
}
else
{
Check_Result = "false";
}
}
موفق باشید.