081229
参数名可以用[j.id]以区别
- DBHelper.GetParameter("@id",SqlDbType.Int,4,"[j.id]",id)//多个逗号也没错,
1.SqlParameter的用法
两种构造函数:
SqlParameter param = new SqlParameter(paramName, paramType, paramSize, ColName);
SqlParameter param = new SqlParameter(paramName, paramType);
param.Value = paramValue;
上面一种是对应数据表中的列的。暂时总结几种用法:
public static SqlParameter GetParameter(String paramName, SqlDbType paramType, Int32 paramSize, String ColName, Object paramValue)
{
SqlParameter param = new SqlParameter(paramName, paramType, paramSize, ColName);
param.Value = paramValue;
return param;
}
DBHelper.GetParameter("@gid", SqlDbType.Int, 4, "[gid]", gid)
当多表查询时,参数有相同时,可以直接在构造函数里区分。
public DataTable getlist(int ocheck,string uid)
{
StringBuilder sb = new StringBuilder();
sb.Append("select oid,a.gid gid,b.gname gname,a.onum onum,a.summary summary,b.gspec gspec from t_TakeOut_Temp a,t_Goods b where a.gid=b.gid and ocheck=@ocheck and a.uid=@uid");
SqlParameter[] param =
{
DBHelper.GetParameter("@ocheck",SqlDbType.Int,4,"[ocheck]",ocheck),
DBHelper.GetParameter("@uid",SqlDbType.VarChar,50,"a.[uid]",uid)//这里用a.[uid]
};
return DBHelper.ExecuteDt(sb.ToString(), param);
}
现在并不十分明白原理,只是会用。
2.与单值的技巧。
- /// <summary>
- /// 根据人员编号取得人员名称
- /// </summary>
- /// <param name="rydm"></param>
- /// <returns></returns>
- public string getrymc(string rydm)
- {
- DataTable dt = getUser(rydm);
- return dt.Rows[0]["rymc"].ToString();
- }
- /// <summary>
- /// 根据人员编号查询
- /// </summary>
- /// <param name="rydm"></param>
- /// <returns></returns>
- public DataTable getUser(string rydm)
- {
- StringBuilder sb = new StringBuilder();
- sb.Append("select * ");
- sb.Append("from p_rydm where [rydm]=@rydm");
- SqlParameter[] param = { DBHelper.GetParameter("@rydm", SqlDbType.VarChar, 50, "[rydm]", rydm) };
- return DBHelper.ExecuteDt(sb.ToString(), param);
- }
首先,写一个取DataTable的方法,以后取哪个单值,就直接调用dt.Rows[0]["字段名"].ToString()
- DataTable table = DBHelper.ExecuteDt(sb.ToString());
- if (table.Rows.Count > 0)
- {
- if (table.Rows[0]["sid"].ToString() != "")
- return table.Rows[0]["sid"].ToString();
- else
- return "1001";
- }
- else
- {
- return "0";
- }
这里Rows.Count判断是必要的,另外有可能返回空字符,所以也有必要判断是否是""
3.DBHelper.ExecuteDt()有两种重载:
执行带参数或不带参数的sql语句。
4.最常用的语句,不用有半点模糊。
查select [gname],[gspec] from goods where [gid]=@[gid] and [oid]=@oid
改update goods set [gname]=@gname,[gspec]=@gspec where [gid]=@gid
删delete from goods where [gid]=@gid
增insert into goods ([gname],[gspec]) values (@gname,@gspec)
5.用到的方法积累
sb.Append("update t_Goods set [storage]=[storage]-@num where [gid]=@gid");
DBHelper.GetParameter("@num",SqlDbType.Int,4,"[num]",num)
这里[num]并不是数据表中对应字段,即@num并不需要对应列名,
可是没有不带对应列名的构造函数,我只好加了个对应列。
奇怪的是,SqlParameter不对应列的构造函数,居然连长度也没有了。
似乎不写长度也行,有默认值,有时间试一试。
5.2
select distinct sid from storein where sdate between @start and @end
6.DBHelper.ExecuteSql(sb.ToString(), param);
这个方法没有不带参数的重载,有时间自己写一下。
现在解决方法是随便加一个参数,但不使用这个参数。
7.除了查找用ExecuteDt()增删改均用ExecuteSql()
另外,自己写的ExecuteDs()及批量执行Sql的方法ExecuteSqls(),以后研究,暂时不用。
那两个方法已经够用。
end