AJA*_*ATI 0 c# sql-server sqldatareader sql-server-2008
我正在使用a SqlDataReader而在尝试阅读读者时我正在使用行.
当我检查时.HasRows,行不可用.
List<EmployeeTimings> empTimingsList = new List<EmployeeTimings>();
// Creates a SQL connection
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["WINPAKContext"].ToString()))
{
// Creates a SQL command
using (var command = new SqlCommand("SELECT * FROM SEED_VIEW WHERE empid is not null and DateTime > '" + dtlastpunch + "' order by datetime", connection))
{
connection.Open();
// Loads the query results into the table
var reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
EmployeeTimings empTime = new EmployeeTimings();
empTime.CardNumber = reader["CardNO"].ToString();
empTime.EMPId = reader["EMPID"].ToString();
empTime.FirstName = reader["FirstName"].ToString();
empTime.LastName = reader["LastName"].ToString();
empTime.Location = reader["Location"].ToString();
empTime.Trans_DateTime = Convert.ToDateTime(reader["DateTime"]);
empTimingsList.Add(empTime);
}
reader.Close();
}
command.ExecuteNonQuery();
}
connection.Close();
}
return empTimingsList;
Run Code Online (Sandbox Code Playgroud)
你能告诉我这个问题吗?
reader.HasRows()电话后发生了什么,redaer没有任何行....
没有必要只检查HasRow属性Read就足够了,如果你只使用read方法并尝试读取没有任何行的读取行而不是它只是存在的行
你可以这样写,删除hasRow就没有必要了
while (reader.Read())
{
EmployeeTimings empTime = new EmployeeTimings();
empTime.CardNumber = reader["CardNO"].ToString();
empTime.EMPId = reader["EMPID"].ToString();
empTime.FirstName = reader["FirstName"].ToString();
empTime.LastName = reader["LastName"].ToString();
empTime.Location = reader["Location"].ToString();
empTime.Trans_DateTime = Convert.ToDateTime(reader["DateTime"]);
empTimingsList.Add(empTime);
}
Run Code Online (Sandbox Code Playgroud)
避免使用SQLInjection
除此之外,您的代码将允许SQLInjection,因为您在查询中直接传递值...使用参数化查询而不是像这样的代码.
查询中的日期时间条件问题
可能存在问题,因为您在不应用任何转换的情况下比较where条件中的datetime值.如果使用参数化sql查询,将解决此问题.
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |