SqlParameter序列化的问题 (报错: 由于安全限制,无法访问类型 System.Runtime.Remoting.ObjRef)
来源:互联网 发布:手机隐形定位软件 编辑:程序博客网 时间:2024/06/08 06:04
SqlParameter remoting 客户端调用服务端方法: DataSet ExecuteProc(string procedurename, SqlParameter[] a);
调用: DataSet ds = SqlUtil.ExecuteProc("存储过程名", parameters);//
parameters 为 SqlParameter[] 类型的实例
报错: 由于安全限制,无法访问类型 System.Runtime.Remoting.ObjRef。原因是
SqlParameter不能序列化.需要添加一个类来转换.
添加如下类:
namespace Modal.SerSqlParameter
{
[Serializable]
public class SerSqlParameter
{
public SerSqlParameter(SqlParameter sPara)
{
this.paraName = sPara.ParameterName;
this.paraLen = sPara.Size;
this.paraVal = sPara.Value;
this.sqlDbType = sPara.SqlDbType;
}
public SqlParameter ToSqlParameter()
{
SqlParameter para = new SqlParameter(this.paraName, this.sqlDbType, this.paraLen);
para.Value = this.paraVal;
return para;
}
private string paraName = "";
public string ParaName
{
get { return this.paraName; }
set { this.paraName = value; }
}
private int paraLen = 0;
public int ParaLen
{
get { return this.paraLen; }
set { this.paraLen = value; }
}
private object paraVal = null;
public object ParaVal
{
get { return this.paraVal; }
set { this.paraVal = value; }
}
private SqlDbType sqlDbType = SqlDbType.NVarChar;
public SqlDbType SqlDbType
{
get { return this.sqlDbType; }
set { this.sqlDbType = value; }
}
}
}
{
[Serializable]
public class SerSqlParameter
{
public SerSqlParameter(SqlParameter sPara)
{
this.paraName = sPara.ParameterName;
this.paraLen = sPara.Size;
this.paraVal = sPara.Value;
this.sqlDbType = sPara.SqlDbType;
}
public SqlParameter ToSqlParameter()
{
SqlParameter para = new SqlParameter(this.paraName, this.sqlDbType, this.paraLen);
para.Value = this.paraVal;
return para;
}
private string paraName = "";
public string ParaName
{
get { return this.paraName; }
set { this.paraName = value; }
}
private int paraLen = 0;
public int ParaLen
{
get { return this.paraLen; }
set { this.paraLen = value; }
}
private object paraVal = null;
public object ParaVal
{
get { return this.paraVal; }
set { this.paraVal = value; }
}
private SqlDbType sqlDbType = SqlDbType.NVarChar;
public SqlDbType SqlDbType
{
get { return this.sqlDbType; }
set { this.sqlDbType = value; }
}
}
}
服务端原来的
//原来的
public DataSet ExecuteProc(string procedurename, SqlParameter[] arParams) {
DataSet ds = SqlUtil.ExecuteProc(procedurename, arParams);
return ds;
}
//修改为
public DataSet ExecuteProc(string procedurename, IList<SerSqlParameter> arParams)
{
SqlParameter[] p = new SqlParameter[arParams.Count];
for (int i = 0; i < arParams.Count;i++ )
{
p[i]=arParams[i].ToSqlParameter();
}
DataSet ds = SqlUtil.ExecuteProc(procedurename, p);
return ds;
}
public DataSet ExecuteProc(string procedurename, SqlParameter[] arParams) {
DataSet ds = SqlUtil.ExecuteProc(procedurename, arParams);
return ds;
}
//修改为
public DataSet ExecuteProc(string procedurename, IList<SerSqlParameter> arParams)
{
SqlParameter[] p = new SqlParameter[arParams.Count];
for (int i = 0; i < arParams.Count;i++ )
{
p[i]=arParams[i].ToSqlParameter();
}
DataSet ds = SqlUtil.ExecuteProc(procedurename, p);
return ds;
}
客户端修改为
//原来的调用
DataSet ds = SqlUtil.ExecuteProc("过程名", parameters);
//修改后
IList<SerSqlParameter> list = new List<SerSqlParameter>();
foreach (SqlParameter pa in parameters)
{
SerSqlParameter serparam = new SerSqlParameter(pa);
list.Add(serparam);
}
DataSet ds = SqlUtil.ExecuteProc("过程名", parameters);
//修改后
IList<SerSqlParameter> list = new List<SerSqlParameter>();
foreach (SqlParameter pa in parameters)
{
SerSqlParameter serparam = new SerSqlParameter(pa);
list.Add(serparam);
}
DataSet ds=SqlUtil.ExecuteProc("过程名",list);
- SqlParameter序列化的问题 (报错: 由于安全限制,无法访问类型 System.Runtime.Remoting.ObjRef)
- 访问限制:由于对必须的库。。。。具有一定限制,因此无法访问类型
- System.Runtime.Remoting.Channels
- 【转】Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型 的解决办法
- 如何解决 Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型
- 如何解决 Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型
- 访问限制:由于对必需的库 rt.jar 具有一定限制,因此无法访问类型 AWTUtilities 解决办法
- 【转】访问限制:由于对必需的库 rt.jar 具有一定限制,因此无法访问类型 AWTUtilities 解决办法
- Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型
- 访问限制:由于对必需的库E:\j2sdk\jre\lib\rt.jar具有一定限制,因此无法访问类型JFrame
- Eclipse中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型
- 关于JAVA之访问限制错误:由于对必需的库具有一定限制,因此无法访问类型
- 访问限制:由于对必需的库 C:/Program Files/Java/jre6/lib/rt.jar 具有一定限制,因此无法访问类型 AudioPlayer
- 访问限制:由于对必需的库 C:/Program Files/Java/jre6/lib/rt.jar 具有一定限制,因此无法访问类型 AudioPlayer
- Java 之 访问限制:由于对必需的库 C:\Program Files\Java\jre6\lib\ext\j3dutils.jar具有一定限制,因此无法访问类型 Scene
- 访问限制:由于对必需的库 F:\Program Files\Java\jre6\lib\rt.jar 具有一定限制,因此无法访问类型 AWTUtilities
- 访问限制:由于对必需的库 C:\Program Files\Java\jre1.8.0_73\lib\rt.jar 具有一定限制,因此无法访问类型 CachedRowSetImpl
- 访问限制:由于对必需的库 jce.jar 具有一定限制,因此无法访问的 解决办法
- android写入联系人Contacts的信息,包括联系人的姓名,联系方式和邮箱
- ASP.NET的图片上传和显示
- 让GDB支持查看C++ STL的内容
- 一滩死水
- 问题:有一个6位自然数 例如123456,要使十位变为偶数
- SqlParameter序列化的问题 (报错: 由于安全限制,无法访问类型 System.Runtime.Remoting.ObjRef)
- Jakarta-ORO
- 继承及内存分析
- ADF中调用JavaScript的方法
- WPF实现拖拽方法
- POJ 1006 Biorhythms
- 说得有理。。。
- strcmp
- 系统崩溃造成数据库无法启动的恢复