2015-12-16 1 views
0

Я пытаюсь пропустить все строки gridview ASP.Net и вставить их в базу данных. Код, который я написал для этих действий, приведен ниже. Но проблема заключается в сохранении пустых данных в базе данных.Как перебрать несколько строк gridview asp.net и вставить в базу данных?

for (int i = 0; i < GridView1.Rows.Count; i++) 
{ 
    f_name = ((TextBox)GridView1.Rows[i].FindControl("TextBox1")); 
    l_name = ((TextBox)GridView1.Rows[i].FindControl("TextBox2")); 
    contacts = ((TextBox)GridView1.Rows[i].FindControl("TextBox3")); 

    string query = string.Format("insert into [StudentsData].[dbo].[Student_Info] values('{0}','{1}','{2}')",f_name.Text,l_name.Text,contacts.Text); 
    command.CommandText = query; 

    try 
    { 
      conn.Open(); 
      command.ExecuteNonQuery(); 
    } 
    finally 
    { 
      conn.Close(); 
    } 
} 
+1

ли вы отладки кода и проверить переменные не являются пустыми? Вы всегда должны использовать [параметризованные запросы] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/). Этот тип конкатенаций строк открыт для [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. 'String.Format' не мешает. Вам нужно очистить эти параметры с помощью метода «Очистить» на каждой итерации, конечно. –

+1

Не используйте конкатенацию строк, но параметризованные запросы для вставки данных в вашу базу данных. В противном случае вы далеко открыты для SQL-инъекций, и вы не можете жаловаться, если ваша база данных будет уничтожена рано или поздно. –

+0

Есть тонна потенциальных возможностей, но это одна кнопка представить с помощью PostBack? Или вы пытаетесь сделать Ajax? – Greg

ответ

0

Сделайте что-то вроде этого цикла (и, как некоторые другие заявили, использовать хранимую процедуру с параметрами):

foreach (GridViewRow row in GridView1.Rows) 
{ 
    f_name = ((TextBox)row.FindControl("TextBox1")).Text; 
    //etc. 
    using (SqlConnection conn = new SqlConnection(yourConnectionString)) 
     { 
      using (SqlCommand cmd = new SqlCommand("yourStoredProcedure", conn)) 
      { 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@f_name", f_name); 
       //etc. 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       conn.Close(); 
      } 
     } 
} 
+0

Мне понравилось, как вы сказали. Но это не работает. Пока он сохраняет пустые данные в базу данных после нажатия кнопки. –

+0

Итак, вам нужно будет выполнить некоторую отладку, чтобы узнать, что именно находится в полях текстовых полей, когда вы пытаетесь сделать вставку и т. Д. Для всех, кто здесь поможет, нам нужно будет увидеть соответствующие части вашей разметки и кода, чтобы лучше понять, как все эти поля относятся к тому, что вы делаете. – morgb

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