HYAppFrame数据库开发入门(ASP.NET Web Service)

本节主要讲解服务器端ASP.NET Web Service数据库配置和操作,客户端数据库操作。

HYAppFrame项目地址:https://sourceforge.net/u/chinahysoft/profile/

1.    服务器端数据库操作
HYAppFrame服务器端通过ASP.NET Web Service连接数据库。

数据库连接配置
在文件Web.config配置数据库,需设置数据库服务器地址Data Source、数据库名称Initial Catalog、访问帐号User Id、访问密码Password等。dbName不需修改。

<connectionStrings>
    <add name="dbName"
      connectionString="Data Source=localhost;Initial Catalog=hyappframe;Integrated Security=False;User Id=sa;Password=123456;"/>
</connectionStrings>

数据库操作
在文件MyFuncLib.cs中定义函数OpenDatabase(string connString),返回一个活动的数据库连接SqlConnection,代码如下:

public static SqlConnection OpenDatabase(string connString)
{
    SqlConnection conn = new SqlConnection();
    try
    {
        conn.ConnectionString = connString;
        conn.Open();
    }
    catch (Exception ex)
    {
        Log("Open database error:" + ex.Message + "\r\n" + ex.StackTrace);
    }
    return conn;
}


数据库查询、更新操作
在文件master.asmx.cs中定义函数ExecQueryBySql(string sql, DataTable paras),将sql查询结果以DataTable形式返回;定义函数ExecNoneQueryBySql(string sql, DataTable paras),返回int型,0表示未影响任何记录,-1表示sql执行错误,>0表示返回受影响记录的条数。
public int ExecNoneQueryBySql(string sql, DataTable paras)
{
    if (!IsLogin())
        return -100;
    SqlConnection conn = MyFuncLib.OpenDatabase(MyFuncLib.connString);
    int result = 0;
    try
    {
        sql = DES.Decrypt(sql, MyFuncLib.passwordKey);
        SqlCommand comd = new SqlCommand();
        comd.CommandTimeout = 1800;
        comd.Connection = conn;
        comd.CommandText = sql;
        comd.Parameters.Clear();
        if (paras != null)
        {
            foreach (DataRow row in paras.Rows)
            {
                comd.Parameters.AddWithValue(MyFuncLib.Dtv(row, "name", string.Empty), MyFuncLib.Dtv(row, "value", string.Empty));
            }
        }
        result = comd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        MyFuncLib.Log(ex.Message + "\r\n" + ex.StackTrace);
        result = -1;
    }
    finally
    {
        MyFuncLib.CloseDatabase(conn);
    }
    return result;
}

为了提高Web Service安全性,启用了Session,要使用方法必须先通过身份验证,同时也对sql语句进行DES加密。具体代码如下:

[WebMethod(EnableSession = true)]
public DataTable ExecQueryByNamed(string queryName, DataTable paras)

2. 客户端数据库操作
客户端使用Web Service提供的函数对数据库进行查询、更新。

直接调用Web Service数据库操作方法,需构造查询所需的参数。
DataTable sqlParams = new DataTable("sqlParametersDataTable");
sqlParams.Columns.Add(new DataColumn("name", System.Type.GetType("System.String")));
sqlParams.Columns.Add(new DataColumn("value", System.Type.GetType("System.String")));
DataRow dRow;
foreach (ListItem item in paras)
{
    dRow = sqlParams.NewRow();
    dRow["name"] = item.Name;
    dRow["value"] = item.Value;
    sqlParams.Rows.Add(dRow);
}
dt = MyFuncLib.WS.ExecQueryBySql(DES.Encrypt(sql, MyFuncLib.PasswordKey), sqlParams);

为了调用简便,在客户端MyFuncLib.cs中封装函数DBCommandExecQueryBySql(string sql, ArrayList paras)、DBCommandExecScalarBySql(string sql, ArrayList paras)、DBCommandExecNoneQueryBySql(string sql, ArrayList paras)

不带参数的查询
string sql = "select 1";
string str = MyFuncLib.DBCommandExecScalarBySql(sql, null);

带参数的查询
string sql = "select 1 from yourtable where ID_ = @id";
ArrayList sqlParams = new ArrayList();
sqlParams.Add(new ListItem("@id", 1));
string str = MyFuncLib.DBCommandExecScalarBySql(sql, sqlParams);

封装后,数据库查询代码变得非常简洁。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。