Я пытаюсь загрузить данные в ComboBox из SQL Server.Неверный синтаксис Рядом с '='. [WindowsForm]
Это метод, в котором возникает ошибка.
Хотя отлажена, это исключение ловится после следующей строки:
metroComboBoxFilterResultsCustomer.ValueMember = "[CD_Id]";
Не уверен, что пошло не так. Пожалуйста, дайте мне знать решение этой проблемы.
try
{
string cDateFrom = DateTime.Parse(metroDateTimeCFrom.Text).ToString("yyyy-MM-dd");
string cDateTo = DateTime.Parse(metroDateTimeCTo.Text).ToString("yyyy-MM-dd");
dbconnection.Open();
DataTable dtName = new DataTable();
string query = "SELECT CD_Id, CD_Customer_Name, CD_Effective_From, CD_Is_Active FROM ADM_Customer_Details WHERE CD_Is_Active = 1 AND CD_Effective_From BETWEEN @cDateFrom AND @cDateTo";
SqlCommand com = new SqlCommand(query, dbconnection);
com.Parameters.Add("@cDateFrom", SqlDbType.DateTime).Value = cDateFrom;
com.Parameters.Add("@cDateTo", SqlDbType.DateTime).Value = cDateTo;
SqlDataReader reader = com.ExecuteReader();
if (reader.Read())
{
dtName.Load(reader);
}
var listNames = CustomerName.ConvertDataTableToList<CustomerIdNameHolder>(dtName)
.Where(x => x.CD_Customer_Name == metroTextBoxFilterCName.Text).ToList();
metroComboBoxFilterResultsCustomer.DisplayMember = "[CD_Customer_Name]";
metroComboBoxFilterResultsCustomer.ValueMember = "[CD_Id]";
metroComboBoxFilterResultsCustomer.DataSource = listNames;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
if (dbconnection.State == ConnectionState.Open)
dbconnection.Close();
}
ДЛЯ ВЕДЕНИЯ
Пожалуйста, ссылки на следующие файлы классов, которые предполагает использование с этим кодом.
Класс файла: CustomerName.cs
public static class CustomerName
{
private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
{
T item = new T();
foreach (var property in properties)
{
if (property.PropertyType == typeof(System.DayOfWeek))
{
DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), row[property.Name].ToString());
property.SetValue(item, day, null);
}
else
{
property.SetValue(item, row[property.Name], null);
}
}
return item;
}
public static List<T> ConvertDataTableToList<T>(this DataTable table) where T : new()
{
IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
List<T> result = new List<T>();
foreach (var row in table.Rows)
{
var item = CreateItemFromRow<T>((DataRow)row, properties);
result.Add(item);
}
return result;
//var customerName = dt.AsEnumerable().Select(dataRow => new CustomerName { Name = dataRow.Field<string>("SUQ_Question") }).ToList();
}
}
Класс файла: CustomerIdNameHolder
class CustomerIdNameHolder
{
public int CD_Id
{
get; set;
}
public string CD_Customer_Name
{
get; set;
}
}
Project Файл
Если учесть более подробную информацию, загрузите исходный код частичного проекта here.
Пожалуйста, войдите в систему. Я включил оба приложения (отладки) и SQL-скрипты, чтобы вы столкнулись с той же проблемой, что и я.
Пожалуйста, дайте мне знать, если кто-нибудь исправит эту проблему.
Большое спасибо.
Попробуйте снять квадратные скобки, имена столбцов в свойствах DisplayMember и ValueMember. –
Обратите внимание, что вы не запускаете reader.Read, а затем DataTable.Load (reader) (если вы не хотите пропустить первую строку, возвращаемую из строк DataTable) – Steve
@DanGuzman - я попробовал ваше предложение. По-прежнему такая же ошибка. – Muruga