Moh*_*Moh 0 c# sql-server-2005
我尝试从SQL Server 2005读取数据并将其填入TableAdapter(也尝试用户DataReader),但我不断收到此异常.问题是我在某些系统上遇到了这个错误,那就是我在一个系统上运行我的应用程序,但在另一个系统上我得到了这个异常.
守则是:
public DataSetRef GetReportPumpControl(PumpInfo pump, DateTime start, DateTime end)
{
if (!OpenConnection())
return null;
m_Command.CommandText = "SELECT ref_dig_pumpcontrol, ref_energy, ref_datetime FROM [molisoftSchema].[Refresh] WHERE ref_pump_id = " + pump.ID + " AND ref_datetime BETWEEN '" + start + "' AND '" + end + "' ORDER BY ref_datetime ASC";
SqlDataAdapter adapter = new SqlDataAdapter(m_Command);
DataSetRef ds = new DataSetRef();
adapter.Fill(ds, "RefreshPC");
return ds;
/*m_Reader = m_Command.ExecuteReader();
LinkedList<PumpControlInfo> returnValue = new LinkedList<PumpControlInfo>();
while (m_Reader.Read())
{
PumpControlInfo tempControl = new PumpControlInfo();
tempControl.DateTime = (DateTime)m_Reader["ref_datetime"];
tempControl.Energy = (double)m_Reader["ref_energy"];
tempControl.PumpControl = (bool)m_Reader["ref_dig_pumpcontrol"];
returnValue.AddLast(tempControl);
}
m_Reader.Close();
return returnValue.ToArray<PumpControlInfo>();*/
}
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.提前致谢!
用1石头杀死2只鸟并参数化你的SQL(将防范SQL注入攻击):
m_Command.CommandText = "SELECT ref_dig_pumpcontrol, ref_energy, ref_datetime FROM [molisoftSchema].[Refresh] WHERE ref_pump_id = @pumpid AND ref_datetime BETWEEN @StartDate AND @EndDate ORDER BY ref_datetime ASC";
m_Command.Parameters.AddWithValue("@pumpid", pump.ID);
m_Command.Parameters.AddWithValue("@StartDate", start);
m_Command.Parameters.AddWithValue("@EndDate", end);
Run Code Online (Sandbox Code Playgroud)
问题是因为.NET开始和结束DateTime值被序列化为一个字符串,以"硬编码"到您生成的SQL中.但是,此字符串表示形式无法转换回SQL中的有效日期时间(您需要使用SAY日期格式,如yyyy-MM-ddTHH:mm:ss - 因此在附加到SQL语句之前显式格式化这些DateTimes) .然而,参数化是解决这些问题的更好的解决方案.
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |