@Remus Rusanu explained well. You cannot use the TOP
keyword for SQL Command. But, still if you want to select some TOP
data, you can use the below alternative solution.
I am selecting all records from the database, But I am putting just ten records in my list and I am returning this list to my dashboard. So, every time I am receiving the latest ten records.
You can use your current SQL command without the TOP
keyword. Mine Is:
SQL Command:
Select [Id], [Name] FROM dbo.CUSTOMER where InsertDate = @InsertDate ORDER BY [ID] DESC;
Then, In your application, you can fill your List based on your top count.
Check my comment on below source code.
public List<CustomerModel> GetAllCustomer()
{
List<CustomerModel> lstCustomerModel = new List<CustomerModel>();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string InsertDate = string.Empty;
InsertDate = DateTime.Now.ToString("yyyyMMdd");
string query = "SELECT [Id] " +
",[Name] " +
"FROM [dbo].[Customer] where InsertDate = " + InsertDate + " ORDER BY [Id] DESC;";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.CommandType = CommandType.Text;
cmd.Notification = null;
SqlDependency.Stop(connectionString);
SqlDependency.Start(connectionString);
SqlDependency sqlDependency = new SqlDependency(cmd);
sqlDependency.OnChange += OnDependencyChange;
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
int counter = 0;
while (reader.Read())
{
if (counter == 10) /* Here, I am reading just first ten record. After 10 records, I am not filling my List. So, It is kind of top 10 records.. Alternative solution.*/
break;
counter++;
lstCustomerModel.Add(new CustomerModel
{
Id = Convert.ToInt32(reader.GetValue("Id")),
Name = WeightUnit = reader.GetValue("Name")
});
//break;
}
}
}
}
return lstCustomerModel;
}
private void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
_context.Clients.All.SendAsync("refreshCustomers");
}
}