日期:2014-05-19  浏览次数:20757 次

如何序列化一個sqlCommand?
sqlCommand中包含參數的值以及Connection,如何將它序列化后傳給WebServies?

------解决方案--------------------
最好不要把这些对象序列化在网上传递而应是把相应的参数信息序列化传递,做到只要传了相应的参数就可以得到相应的数据.
------解决方案--------------------
据我所知,SqlCommand不能被序列化...

可以换个思路,将SqlCommand的一些相关信息,比如CommandText及ConnectionString传输过去,在服务端再根据这些相应信息创建SqlCommad及SqlConnection实例进行相应的操作...
------解决方案--------------------
变换个方式传送不一样吗?
------解决方案--------------------
Mark
------解决方案--------------------
SqlCommand不可序列化,因为它包含PropertyEditor。
最好序列化SqlCoection的ConnectionString和SqlCommand的CommandText。
------解决方案--------------------
不知道你为什么要将数据库操作类进行序列化,SqlConnection不能序列化,调用WebService的目的是来完成功能和系统整合,如果你用到与数据库有关的操作,你是不是可以考虑一下“这样设计合理吗?”
不能够xml序列化是没有实现ICollecton接口,以下仅做参考.
public abstract class HashBase:ICollection
{
protected SortedList inner=new SortedList();

#region ICollection 成员

public bool IsSynchronized
{
get{return false;}
}

public int Count
{
get{return inner.Count;}
}

public void CopyTo(Array array, int index)
{
inner.CopyTo(array,index);
}

public object SyncRoot
{
get{return this;}
}

#endregion

#region IEnumerable 成员

public IEnumerator GetEnumerator()
{
return inner.GetEnumerator();
}

#endregion
}

/// <summary>
/// 设置参数列表
/// </summary>
[Serializable]
public class Properties:HashBase
{
public Properties(){}

public virtual string this[int index]
{
get{return (string)inner.GetByIndex(index);}
set{inner.SetByIndex(index,value);}
}

public virtual string this[string key]
{
get{return (string)inner[key];}
set{inner[key]=value;}
}

public virtual void Add(string value)
{
this.Add(value,value);
}

public virtual void Add(string key,string value)
{
if(inner.ContainsKey(key))
inner[key]=value;
else
inner.Add(key,value);
}

public virtual void Remove(string key)
{
inner.Remove(key);
}

public virtual void RemoveAt(int index)
{
inner.RemoveAt(index);
}

public virtual bool ContainsKey(string key)
{
return inner.ContainsKey(key);
}

private string[] GetStringArray(IList list)
{
if(list==null||list.Count <=0)
return null;
string[] strs=new string[list.Count];
for(int n=0;n <list.Count;n++)
strs[n]=(string)list[n];
return strs;
}

public virtual string[] GetKeys()
{
return this.GetStringArray(inner.GetKeyList());
}

public virtual string[] GetValues()
{
return this.GetStringArray(inner.GetValueList());
}
}