永发信息网

怎样把Parameter[] 转换成SqlParameter[]

答案:2  悬赏:80  手机版
解决时间 2021-02-27 20:58
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-02-26 21:14
我的目的是先传入参数,然后判断是用OleDb还是Sql,所以不直接传递SqlParameter,而是传递Parameter后再转换。
这是我的方法:
1.//初始化Parameter[]
Parameter[] param = new Parameter[] { new Parameter("@inquiry_contact", DbType.String, inquiry_contact.Text), new Parameter("@inquiry_mail", DbType.String, inquiry_mail.Text), new Parameter("@inquiry_tel", DbType.String, inquiry_tel.Text), new Parameter("@inquiry_mobile", DbType.String, inquiry_mobile.Text), new Parameter("@inquiry_need", DbType.String, inquiry_need.Text), new Parameter("@inquiry_content", DbType.String, inquiry_content.Text), new Parameter("@inquiry_company", DbType.String, inquiry_company.Text), new Parameter("@inquiry_name", DbType.Int32, Request.QueryString["id"]) };
2. //把Parameter[]转换为SqlParameter[]
private static SqlParameter[] GetParameter(Parameter[] Param)
{
SqlParameter[] SqlParam = new SqlParameter[Param.Length];
for (int i = 0; i < Param.Length; i++)
{ SqlParam[i] = new SqlParameter(Param[i].Name, Param[i].DefaultValue); }
return SqlParam;
}
问题在这里:
new SqlParameter(Param[i].Name, Param[i].DefaultValue); 只用了Param的两个属性,
new Parameter("@inquiry_name", DbType.Int32, Request.QueryString["id"])初始化的时候传入了三个属性。那么信息不就丢失了么?
这个周末解释?或者有其他传递参数的方法。

存在数据丢失的,SqlParam[i] = new SqlParameter(Param[i].Name, Param[i].DefaultValue);
DefaultValue是字符串类型,也就是所有sql参数都被定义成了字符串参数,
而sql参数是有很多型的,比如 new SqlParameter(@datatime,DateTime.now())时间类型;
所以应该这样赋值:
for (int i = 0; i < Param.Length; i++) { SqlParam[i] = new SqlParameter(Param[i].Name, Param[i].DbType);SqlParam[i].Value = Param[i].DefaultValue; }
没有满意答案,自问自答了!!!
最佳答案
  • 五星知识达人网友:怀裏藏嬌
  • 2021-02-26 21:42
SqlParameter parms=new SqlParameter();
一共有7个重载的方法,一般我都是用接收4个参数的,应该是可以解决你的问题的。
全部回答
  • 1楼网友:想偏头吻你
  • 2021-02-26 22:37
参数化sql,防止sql注入攻击,动态地填充cmd中的sql语句中的参数
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯