PDA

View Full Version : سوال: خروجی DataTable از WCF Service



notepad
شنبه 20 آبان 1396, 23:07 عصر
با سلام خدمت تمامی دوستان

یک برنامه سرویسی که procedure را صدا می زند که خروجی آن DataTable می باشد.


public DataTable TBL_Objects_SelectAll(string Fileds, string WhereClause) {


SqlDataAdapter sqlDa = new SqlDataAdapter();


DataTable objRet = new DataTable();


try
{


using (SqlConnection objCnn = new SqlConnection(ConnectionString))
{
objCnn.Open();
using (SqlCommand objCmd = objCnn.CreateCommand())
{
objCmd.CommandType = System.Data.CommandType.StoredProcedure;
objCmd.CommandText = "TBL_Objects_SelectAll";


objCmd.Parameters.Add(new SqlParameter("@Fileds", Fileds));
objCmd.Parameters.Add(new SqlParameter("@WhereClause", WhereClause));
//object obj = objCmd.ExecuteNonQuery();


sqlDa.SelectCommand = objCmd;
sqlDa.Fill(objRet);


}
}
}
catch (Exception ex)
{
//ex.Message
throw;
}
return objRet;
}


که در پروژه سرویس هم بدون اشکال داده بر میگرداند و اما در پروژه اصلی که برنامه به خطا برمیخورد.



TBL_ObjectsService.TBL_ObjectsServiceClient Client = new TBL_ObjectsService.TBL_ObjectsServiceClient();
try
{


DataTable dt = new DataTable();
dt = Client.TBL_Objects_SelectAll("*", "");


}
catch (Exception ex)
{
//ex.Message
throw;
}
return View();


147027
procedure هم بدون اشکال است و به شرح زیر

ALTER PROCEDURE [dbo].[TBL_Brand_SelectAll](
@Fileds NVARCHAR(500),
@WhereClause NVARCHAR(200)
)
AS


BEGIN


DECLARE @SQL NVARCHAR(MAX)



SET @SQL = 'SELECT '+@Fileds+' FROM [TBL_Brand] '+
CASE WHEN LEN(@WhereClause) > 0 THEN +' WHERE '+@WhereClause ELSE '' END

EXEC sp_executesql @SQL


END





:متفکر:
با تشکر فراون

notepad
دوشنبه 22 آبان 1396, 06:14 صبح
سلام بالاخره پیدا کردم ، سرویس باید به صورت زیر نوشته شود.


public DataTable TBL_Objects_SelectAll(string Fileds, string WhereClause) {


DataTable objRet = new DataTable();


try
{


using (SqlConnection objCnn = new SqlConnection(ConnectionString))
{

string ProcedureName = "TBL_Objects_SelectAll";


using (SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = new SqlCommand(ProcedureName, objCnn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter("@Fileds", Fileds));
da.SelectCommand.Parameters.Add(new SqlParameter("@WhereClause", WhereClause));


DataSet ds = new DataSet();
da.Fill(ds, "result_name");


objRet = ds.Tables["result_name"];
}
}
}
catch (Exception ex)
{
//ex.Message
throw;
}
return objRet;
}
}