как исправить sql запрос с использованием stringbuilder l oop .TQ - PullRequest
0 голосов
/ 05 апреля 2020

Как исправить запрос SQL, который выглядит следующим образом

insert into T (NO_ID, Room, RoomID, Name,)
values (10, 10, 10, 10,)

Кнопка 3 при нажатии сохранит данные в SQL

private void button3_Click(object sender, EventArgs e)
{
    string[] text = new string[DT.Columns.Count];

    foreach (DataColumn DC in DT.Columns)
    {
        for (int k = 0; k < DT.Columns.Count; k++)
        {
            // to save the datacolumn headertext name to string[]
            text[k] = DC.Table.Columns[k].ToString();
        }
    }
}

SQL parts t11 is SQL строка подключения

SqlConnection SC = new SqlConnection(T11);
SC.Open();

// SQL query parts
StringBuilder command = new StringBuilder("insert into ");
//T33 is the table name
command.Append(T33).Append("(");

// I use the forloop to keep add string on `string[]`
for (int i = 0; i < DT.Columns.Count; i++)
{
    command.Append(text[i]+",");
}

command.Append(")values(");

for (int l= 0; l < DT.Columns.Count; l++)
{
    command.Append("10"+",");
}
command.Append(")");

using (SqlCommand sqlCommand = new SqlCommand(command.ToString(), SC))
{
    sqlCommand.ExecuteNonQuery();
}

Скриншот ошибки:

введите описание изображения здесь

1 Ответ

2 голосов
/ 05 апреля 2020

Вы генерируете свои входные данные в al oop, добавляя значение и запятую. Тогда это означает, что вы получите 1 запятую, слишком много, как это;

values(10,10,10,10,

Так что после того, как вы сгенерировали свои входные данные, вы должны удалить это. Вы можете сделать это, уменьшив длину Stringbuilder, например так:

for (int i = 0; i < DT.Columns.Count; i++)
{
    command.Append(text[i]+",");
}

//Reduce the length of StringBuilder by 1
sb.Length--;
command.Append(")values(");

for (int l= 0; l < DT.Columns.Count; l++)
{
    command.Append("10"+",");
}

//Reduce the length of StringBuilder by 1
sb.Length--;
command.Append(")");

Кстати: вам нужно переключиться на использование AddParameter для ваших значений, это безопаснее против SQL инъекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...