WCF 服务类

L_Y_H_1_2_3_4 2014-05-09 10:28:00

//服务名称:ServiceReference1
//服务端:Service1.svc里面的代码如下
string connectionString = "Data Source=WIN-80OAKU6S6L2;Initial Catalog=lyhjxc;User ID=sa;PassWord=123456;";


/// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>影响的记录数</returns>
public int ExecuteSql1(string SQLString, params SqlParameter[] cmdParms)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
cmd.Parameters.AddRange(cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw e;
}
}
}
}

/// <summary>
///
/// </summary>
/// <param name="cmd"></param>
/// <param name="conn">SQL连接</param>
/// <param name="trans">事物</param>
/// <param name="cmdText">SQL语句</param>
/// <param name="cmdParms">参数</param>
private void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
{
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
Hashtable SQLStringList = new Hashtable();
}
catch (System.Data.SqlClient.SqlException ex)
{
throw ex;
}
}


//IService1.cs

[OperationContract]
int ExecuteSql1(string SQLString, params SqlParameter[] cmdParms);


//客户端调用ExecuteSql1方法:
ServiceReference1.Service1Client FF= new ServiceReference1.Service1Client();

FF.ExecuteSql1(“select * from user where ID=@ID”,cmdParms)

执行后报如下错误:

尝试对参数 http://tempuri.org/ 进行序列化时出错: cmdParms。InnerException 消息是“不应为数据协定名称为“string:http://www.w3.org/2001/XMLSchema”的类型“System.Data.SqlTypes.SqlString”。请考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 特性,或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。”。有关详细信息,请参见 InnerException。


这个问题要怎么处理??
...全文
147 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
L_Y_H_1_2_3_4 2014-05-09
  • 打赏
  • 举报
回复
引用 2 楼 porenasckx 的回复:
http://www.cnblogs.com/pan11jing/archive/2011/08/19/2051827.html
在吗?你提供的那个方法 我在客户端调用的服务端时候提示的类型中没有: IList<SerSqlParameter> cmdParms类型是怎么回事??
L_Y_H_1_2_3_4 2014-05-09
  • 打赏
  • 举报
回复
引用 2 楼 porenasckx 的回复:
http://www.cnblogs.com/pan11jing/archive/2011/08/19/2051827.html
这个好像可以我去试试不懂再问你
zhao38322684 2014-05-09
  • 打赏
  • 举报
回复
SqlParameter 可以序列化吗。。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧