如题,我现在 有 客户端 服务端,用 socket通讯,客户端如何把 带参数的 sql语句发送到服务端,参数中有可能会有二进制类型
我补充一下,我的目的是 :客户端 把 sql语句发送给 服务端,服务端去执行,
现在 sql语句 有参数,参数的值可能有二进制
把参数做成数组,然后序列化成二进制流,在服务端将其反序列成参数对象则可
//将要发送给连接上来的客户端的提示字符串
string strDateLine = "sql xxxx";
Byte[] byteDateLine = System.Text.Encoding.ASCII.GetBytes(strDateLine);
//将提示信息发送给客户端
Client.Send(byteDateLine, byteDateLine.Length, 0);
http://zhupengyue.blog.51cto.com/227198/324869/
你得把数据转为socket 发送的 语句,再发给服务端,服务端在转回来
。 自己顶一个
以下是模拟序列化和反序列化的代码,调试过可以使用。不理解的话可以开个Console的工程吧代码贴进去先单步调试一下,理解其中的含义
class Program
{
[Serializable]
public class ParamArg
{
public String _name;
public Object _value;
public ParamArg(String name, Object value)
{
_name = name;
_value = value;
}
}
[Serializable]
public class SendParam
{
public String sql;
public List<ParamArg> paramList = new List<ParamArg>();
public SqlParameter[] getSqlParameters()
{
SqlParameter[] ret = new SqlParameter[paramList.Count];
for(int i = 0; i < paramList.Count; i ++)
{
ret[i] = new SqlParameter(paramList[i]._name, paramList[i]._value);
}
return ret;
}
}
static void Main(string[] args)
{
// 此处为发送部分代码
MemoryStream ms = new MemoryStream();
SendParam param = new SendParam();
// 此处为需要传递的其他参数,比如sql文正文等信息
param.sql = "SELECT * FROM xxx WHERE f1=...";
// 此处增加需要传递到后台的参数
param.paramList.Add(new ParamArg("abc", 100));
BinaryFormatter serial = new BinaryFormatter();
serial.Serialize(ms, param);
// 将ms中的数据发送到远程.....
/////////////////////////////////////////////////////////////////
// 此处为模拟接收部分代码,将ms的初始位置设置为0,代表数据在服务端已经接收到ms对象中
ms.Position = 0;
// 此处为解码的代码:
BinaryFormatter deserial = new BinaryFormatter();
SendParam oo = (SendParam)deserial.Deserialize(ms);
// 此处将远程的传过来的参数序列化成SqlParameter对象
SqlParameter[] paramList = oo.getSqlParameters();
}
}
非常感谢
我在 论坛也提问了,你去回答下吧,我那里把分也给你
http://bbs.csdn.net/topics/392066049