Сами значения должны быть в скобках и также разделяться запятыми.
Я думаю, что ваш код производит это:
insert into dummy(name,amount)valuesthisname100
Но вам нужно изменить это, чтобы произвести это:
INSERT INTO dummy (name, amount) VALUES ('thisname', 100)
пример кода, который сделает это:
StringBuilder sb = null;
sb = new StringBuilder();
sb.Append("insert into dummy(name,amount)values (");
foreach (Control ctl in this.flowLayoutPanel1.Controls)
{
if (ctl.Name.Contains("tb") && ctl is TextBox)
{
sb.Append("'" + ctl.Text + "'");
}
}
sb.Append(", ");
foreach(Control bbl in this.flowLayoutPanel1.Controls)
{
if(bbl.Name.Contains("bb") && bbl is TextBox)
{
sb.Append(bbl.Text);
}
}
sb.Append(")");
SqlCommand cmd1 = new SqlCommand(sb.ToString(), con);
cmd1.CommandType = CommandType.Text;
cmd1.ExecuteNonQuery();
Этот код далек от идеала, но он должен исправить вашу ошибку синтаксиса SQL. Некоторые другие улучшения, о которых вы должны подумать:
- Убедитесь, что в каждом цикле foreach найдено только одно текстовое поле. Если их больше одного, количество полей не будет совпадать.
- Вставьте код проверки или исправления, чтобы в тексте, введенном пользователем, не появлялись одинарные кавычки, или измените SQL для использования параметров (спасибо Jon Skeet ).
- Поставьте проверку, чтобы убедиться, что ваше второе текстовое поле может быть проанализировано как число (см. Int.TryParse ()), при условии, что ваше поле Amount является числовым.
Однако гораздо лучше было бы сделать это ( EDITED , чтобы помочь mahesh с его кодированием, теперь включает несколько вставок):
string sName = null;
double? nAmount = null;
foreach (Control ctl in this.flowLayoutPanel1.Controls)
{
if (ctl.Name.Contains("tb") && ctl is TextBox) sName = ctl.Text;
if (ctl.Name.Contains("bb") && ctl is TextBox)
{
double nTmp = 0;
if (double.TryParse(ctl.Text, out nTmp)) nAmount = nTmp;
}
if (sName != null && iAmount != null)
{
SqlCommand cmd1 = new SqlCommand("INSERT INTO dummy (name, amount) VALUES (@name, @amount)", con);
cmd1.Parameters.Add("@name", SqlDbType.VarChar).Value = sName;
cmd1.Parameters.Add("@amount", SqlDbType.Decimal).Value = nAmount;
cmd1.ExecuteNonQuery();
sName = null;
nAmount = null;
}
}