先说结论
SqlParameter只能使用一次,第二次则失效
完整举例:
**PeServer.form.helper.ExcuteDataTable()**是我自己封装的C#工具类,用于执行数据库操作语句
string sqlStrA = "select TOP 1 * from t_Alarm with(nolock) where deviceId=@deviceId and AlarmCode=@AlarmCode order by Id desc";
string sqlStrB= "select TOP 1 Flag from t_Alarm with(nolock) where deviceId=@deviceId and AlarmCode=@AlarmCode order by Id desc";
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@deviceId", DataAnalysis.HexToFloat(idd)),
new SqlParameter("@AlarmCode",code)
};
DataTable sdr = PeServer.form.helper.ExcuteDataTable(sqlStrB, para);//第一次使用para,有结果
DataTable t_Alarm_DBdata = PeServer.form.helper.ExcuteDataTable(sqlStr, para);//第二次使用para,为null
解决办法:新建一个para2,不要使用同一个SqlParameter两次
string sqlStrA = "select TOP 1 * from t_Alarm with(nolock) where deviceId=@deviceId and AlarmCode=@AlarmCode order by Id desc";
string sqlStrB= "select TOP 1 Flag from t_Alarm with(nolock) where deviceId=@deviceId and AlarmCode=@AlarmCode order by Id desc";
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@deviceId", DataAnalysis.HexToFloat(idd)),
new SqlParameter("@AlarmCode",code)
};
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@deviceId", DataAnalysis.HexToFloat(idd)),
new SqlParameter("@AlarmCode",code)
};
DataTable sdr = PeServer.form.helper.ExcuteDataTable(sqlStrB, para);//第一次使用para,有结果
DataTable t_Alarm_DBdata = PeServer.form.helper.ExcuteDataTable(sqlStr, para2);//没有重复使用para,有结果
我折腾了1个半小时,试过好几种方法
- 同一个表同一个数据
- 同一个表不同数据
- 不同表不同数据
发现都会导致第二个和之后的查询结果为null