C# Winform socket 如何发送 带 SqlParameter 的sql语句

如题,我现在 有 客户端 服务端,用 socket通讯,客户端如何把 带参数的 sql语句发送到服务端,参数中有可能会有二进制类型

我补充一下,我的目的是 :客户端 把 sql语句发送给 服务端,服务端去执行,
现在 sql语句 有参数,参数的值可能有二进制

7个回答

把参数做成数组,然后序列化成二进制流,在服务端将其反序列成参数对象则可

tang_cheng
tang_cheng 非常感谢,你不必太在意采纳的事情。我一般闲暇都会上来逛逛,如果你有什么急着要解决的问题也可以在csdn里私信我,如果问题不急,不妨发个帖子,也好多吸收一下大家的意见。
接近 3 年之前 回复
txmrbfbj
txmrbfbj 大神,你有其他联系方式么,我想加个好友 ~ ~
接近 3 年之前 回复
txmrbfbj
txmrbfbj 这个怎么采纳 啊,我虽然经常上 csdn,但是这还是第一次提问题。。
接近 3 年之前 回复
tang_cheng
tang_cheng 我写了一段模拟的测试代码在下面回帖里,你先看一下吧
接近 3 年之前 回复
txmrbfbj
txmrbfbj 这个 数组怎么定义 List<object> 吗?反序列化 时 object 如何知道 是什么类型的
接近 3 年之前 回复
txmrbfbj
txmrbfbj 不好意思啊,我刚刚没看仔细,好像你说的有道理,能不能解释具体一点,麻烦大大了
接近 3 年之前 回复
txmrbfbj
txmrbfbj 关键是带参数的 sql语句,参数怎么办呢
接近 3 年之前 回复

你得把数据转为socket 发送的 语句,再发给服务端,服务端在转回来

txmrbfbj
txmrbfbj 带参数的 sql语句,怎么转换成 普通 sql语句,而且普通的 sql语句怎么值怎么用 二进制的值
接近 3 年之前 回复

以下是模拟序列化和反序列化的代码,调试过可以使用。不理解的话可以开个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();
        }
    }

txmrbfbj
txmrbfbj 非常感谢 我在 论坛也提问了,你去回答下吧,我那里把分也给你 http://bbs.csdn.net/topics/392066049
接近 3 年之前 回复
txmrbfbj
txmrbfbj 好,我去试试
接近 3 年之前 回复

//将要发送给连接上来的客户端的提示字符串
string strDateLine = "sql xxxx";
Byte[] byteDateLine = System.Text.Encoding.ASCII.GetBytes(strDateLine);
//将提示信息发送给客户端
Client.Send(byteDateLine, byteDateLine.Length, 0);

txmrbfbj
txmrbfbj 这个 "sql xxxx"; 传过去没有用啊,里面没有值
接近 3 年之前 回复

。 自己顶一个

非常感谢
我在 论坛也提问了,你去回答下吧,我那里把分也给你
http://bbs.csdn.net/topics/392066049

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!