PDA

View Full Version : راه حلی برای نمایش خطاهای SQL در C#‎‎



sohrabi.1384
یک شنبه 02 آذر 1393, 19:39 عصر
سلام دوستان مبتدی هستم میخواسم پارامتر ErrorMessage از SQL رو به C#‎‎‎‎‎‎‎‎ ارجاع بدم با روش ایجاد Query با دارای خروجی غیر مستقیم. که کد خطا با مسیج به C#‎‎‎‎ ارسال شود اگر راهی نشان دهید ممنون میشم.
Proc Query:
CREATE PROC USP_ISP_Person
@ID INT,
@Name Nvarchar(20),
@Family Nvarchar(20),
@Age Nvarchar(20),
@ErrorMessage NVARCHAR(50) OUTPUT
AS
BEGIN
DECLARE @ErrorNumber INT
SET @ErrorNumber=0
SET @ErrorMessage=''
BEGIN TRY
INSERT Persons( ID,Name, Family,Age)
VALUES (@ID,@Name,@Family,@Age)
END TRY
BEGIN CATCH
SET @ErrorNumber= ERROR_NUMBER()
SET @ErrorMessage= ERROR_NUMBER()
END CATCH
RETURN @ErrorMessage
END
GO
C#‎‎‎‎‎‎‎‎ code: bool InsertPerson(int ID,string Name,string Family, int Age)
{
SqlConnection CN = new SqlConnection("Data Source=LENOVO\\MHD;Initial Catalog=ADONETDB;Integrated Security=True");
try
{
SqlCommand Cmd = new SqlCommand();
Cmd.CommandText = "USP_ISP_Person";
Cmd.CommandType = CommandType.StoredProcedure;
//

Cmd.Parameters.AddWithValue("@ID", ID);
Cmd.Parameters.AddWithValue("@Name", Name);
Cmd.Parameters.AddWithValue("@Family", Family);
Cmd.Parameters.AddWithValue("@Age", Age);
Cmd.Connection = CN;
CN.Open();
SqlDataReader Dr = Cmd.ExecuteReader();
return true;
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
return false;
}
finally
{
CN.Close();
}
اما با Error :


Procedure Or Function 'USP_ISP_Person' Expects Parameter '@ErrorMessage' ,Which was not Supplied

sohrabi.1384
دوشنبه 03 آذر 1393, 09:17 صبح
ممنون از دوست خوبم ایشون گفتند :
در کد SQL باید مقدار ErrorNumber را هم بصورت Output بنویسی تا بتوانی ان را در خروجی ببینی. و همچنین باید در C#‎‎‎ 2 تا پارامتر تعریف کنی و جهت پارامتر را بصورت Output قرار بدی.
@ErrorNumber INT output
ولی منطور ایشون رو متجه نشدم میشه کد C#‎‎‎ رو دوستان عزیز توضیح بدهند
----------------------------------------
SQL:
,@ErrorNumber INT output
----------------------------------------
C#‎‎‎:
DataSqlCommand.Parameters.Add("ErrorMessage", System.Data.SqlDbType.BigInt);
DataSqlCommand.Parameters.Add("ErrorNumber", System.Data.SqlDbType.BigInt);

DataSqlCommand.Parameters["ErrorMessage"].Direction = System.Data.ParameterDirection.Output;
DataSqlCommand.Parameters["ErrorNumber"].Direction = System.Data.ParameterDirection.Output;

DataSqlCommand.ExecuteNonQuery();
errorNumber = Convert.ToInt32(DataSqlCommand.Parameters["ErrorNumber"].Value);

sohrabi.1384
دوشنبه 03 آذر 1393, 09:20 صبح
ممنون از دوست خوبم ایشون گفتند :
در کد SQL باید مقدار ErrorNumber را هم بصورت Output بنویسی. و همچنین باید در C#‎‎ 2 تا پارامتر تعریف کنی و جهت پارامتر را بصورت Output قرار بدی.
@ErrorNumber INT output
ولی منطور ایشون رو متجه نشدم میشه کد C#‎‎ رو دوستان عزیز توضیح بدهند
----------------------------------------
SQL:
,@ErrorNumber INT output
----------------------------------------
C#‎‎:
DataSqlCommand.Parameters.Add("ErrorMessage", System.Data.SqlDbType.BigInt);
DataSqlCommand.Parameters.Add("ErrorNumber", System.Data.SqlDbType.BigInt);

DataSqlCommand.Parameters["ErrorMessage"].Direction = System.Data.ParameterDirection.Output;
DataSqlCommand.Parameters["ErrorNumber"].Direction = System.Data.ParameterDirection.Output;

DataSqlCommand.ExecuteNonQuery();
errorNumber = Convert.ToInt32(DataSqlCommand.Parameters["ErrorNumber"].Value);