WCF 访问SQLServer数据库服务代码

建立WCF可以程序的远程跨平台服务,实现最大的兼容性,而且可以通过TCP,UDP,Http等多种方式传输数据,下面是WCF服务器端实现访问SQLServer数据库访问的代码。

 

定义WCF服务的ISqlService.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace WCFSql
{
    [ServiceContract]
    public interface ISqlService
    {
        //服务定义
        [OperationContract]
        DataSet GetDataSet(ref SqlPara para);//获取Dataset

        [OperationContract]
        bool ExeSQL(ref SqlPara para);//执行SQL语句
    }

    //数据定义
    [DataContract]
    public class SqlPara
    {
        string SqlStr = "";//SQL语句
        string ErrStr = "";//如果有错误产生,此参数返回错误信息

        [DataMember]
        public string SqlString
        {
            get { return SqlStr; }
            set { SqlStr = value; }
        }

        [DataMember]
        public string ErrorString
        {
            get { return ErrStr; }
            set { ErrStr = value; }
        }
    }
}

 

实现WCF服务的SqlService.svc.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace WCFSql
{
    public class SqlService : ISqlService
    {
        const string ConnStr = "Data Source=szdb-02;Initial Catalog=SDS;Persist Security Info=True;User ID=sa;Password=szpj@2011";//连接字符串

        /// <summary>
        /// 执行SQL语句,包括存储过程等获取数据集
        /// </summary>
        /// <param name="para">SQL参数</param>
        /// <returns></returns>
        public DataSet GetDataSet(ref SqlPara para)
        {
            SqlConnection conn = new SqlConnection(ConnStr);
            try
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(para.SqlString, conn);
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();

                adp.Fill(ds);
                para.ErrorString = "";
                conn.Close();

                return ds;
            }
            catch (Exception ex)
            {
                if (conn.State == ConnectionState.Open) conn.Close();
                para.ErrorString = ex.Message;
                return null;
            }

        }

        /// <summary>
        /// 执行SQL语句,Insert Delete Update等
        /// </summary>
        /// <param name="para">SQL参数</param>
        /// <returns></returns>
        public bool ExeSQL(ref SqlPara para)
        {
            SqlTransaction tran = null;
            SqlConnection conn = new SqlConnection(ConnStr);
            try
            {
                conn.Open();
                tran = conn.BeginTransaction();
                SqlCommand cmd = new SqlCommand(para.SqlString, conn, tran);
                cmd.ExecuteNonQuery();
                tran.Commit();

                conn.Close();
                para.ErrorString = "";

                return true;
            }
            catch (Exception ex)
            {
                tran.Rollback();
                if (conn.State == ConnectionState.Open) conn.Close();
                para.ErrorString = ex.Message;

                return false;
            }
        }

        public void DoWork()
        {
        }
    }
}

 

 

示例代码是VS2012+SQLServer 2008编写。

 

发布WCF与发布Web站点基本一样,只是要把整个编译的几个文件放到虚拟目录中:


 发布以后要注意在Windows防火墙中把访问的端口开放,否则只能在本机访问,其他机器访问不了。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值