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防火墙中把访问的端口开放,否则只能在本机访问,其他机器访问不了。

猜你喜欢

转载自lin9feng.iteye.com/blog/2270611
WCF