راه حلی برای نمایش خطاهای SQL در C#
سلام دوستان مبتدی هستم میخواسم پارامتر 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
نقل قول: راحلی برای نمایش خطاهای SQL در C# ??
ممنون از دوست خوبم ایشون گفتند :
در کد 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);
نقل قول: راحلی برای نمایش خطاهای SQL در C# ??
ممنون از دوست خوبم ایشون گفتند :
در کد 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);