2016-04-21 7 views
0

Я пытаюсь вставить несколько слов, которые хранятся в качестве элемента. Мой проект - это asp.net веб-проект. Я хотел бы генерировать идентификатор для каждого слова и сохранять 4 поля null. 6 полей в моей таблице слов в database.id длина слова fr Логический вес.Вставка коллекции предметов в Asp.net

Когда я запускаю проект, я получаю эту ошибку.

ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто.

Вот код,

using (con){ 
    con.Open(); 

    foreach (var item in results) {//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them) 
     id++; 
     SqlCommand cmd= con.CreateCommand(); 
     cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')"; 

     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 

Edit:

Я переехал con.Close из итерации цикла, но вот теперь я получил эту ошибку;

Ошибка сервера в приложении «/».

Неправильный синтаксис рядом с 's'. Незакрытая кавычка после символа строка ')'.

using (con){ 
     con.Open(); 

     foreach (var item in results) {//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them) 
      id++; 
      SqlCommand cmd= con.CreateCommand(); 
      cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')"; 

      cmd.ExecuteNonQuery(); 

     } con.Close(); 
} } 
+2

вы закрываете соединение на каждой итерации цикла for. –

+0

Я переместил его на улицу, теперь он дает мне эту ошибку «Неправильный синтаксис рядом с». Незакрытая кавычка после символьной строки ')'. " – user1953051

+0

Можете ли вы обновить свой вопрос, включив свой код так, как сейчас? –

ответ

3

В коде:

using (con){ 
    con.Open(); 

    foreach (var item in results) { 
     //here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them) 
     id++; 
     SqlCommand cmd= con.CreateCommand(); 
     cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')"; 

     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 

Вы написали con.Close() в Еогеасп, так что в конце первого цикла закрыть соединение.

Так переместить con.Close() после закрывающей скобки вашего Еогеасп, как это:

using (con){ 
con.Open(); 

foreach (var item in results) {//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them) 
    id++; 
    SqlCommand cmd= con.CreateCommand(); 
    cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')"; 

    cmd.ExecuteNonQuery(); 
} 
con.Close(); 
2

на первой итерации, закрывающей SQL-соединение.

переместить линию: "con.Close();" вне цикла.

Для вашего второго вопроса, убедитесь, что вы убегаете quatation знак в слове собственности и попробуйте использовать формат строки для создания вставить

снабжать струной, тетивой и т.п.
string word = String.Replace(item.Word,"'","''") 
cmd.CommandText = string.Format("insert into word values('{0}','{1}','{2}','{3}','{4}','{5}')", id, word, 0, 0, 0, 0); 
1

Вы должны быть уверены, что каждое слово (item.Word) не имеет котировочный знак, может быть

String.Replace(item.Word,"'","''") 

решить вашу проблему.

Смежные вопросы