2013-03-26 3 views
0

Я читаю содержимое таблицы в своем приложении C#, в котором конечный пользователь сможет редактировать данные. Затем я хочу отправить эту новую информацию в базу данных.Обновление таблицы SQL Server на основе ввода уровня пользователя

DataTable Table = new DataTable("TestTable"); 
      using (SqlConnection _con = new SqlConnection(connectionString)) 
      { 
       string queryStatement = "SELECT * FROM dbo.usr_Table ORDER BY code ASC"; 

       using (SqlCommand _cmd = new SqlCommand(queryStatement, _con)) 
       { 
        SqlDataAdapter _dap = new SqlDataAdapter(_cmd); 

        _con.Open(); 
        _dap.Fill(Table); 
        _con.Close(); 
       } 
      } 

      dataGridView1.DataSource = Table; 

Я достаточно уверен в SQL, чтобы написать UPDATE заявление, инлайн с моей C# код, но это лучший/самый эффективный способ пойти об этом?

Мне нужно будет обновить на основе каждой строки в новой стороне приложения, могу ли я иметь что-то вроде этого ?;

SqlCommand sqlCmd = new SqlCommand("UPDATE usr_Table SET description= @description, subject = @subject, text = @text, status = @status WHERE code = @code", connectionString); 

Если да, то каким образом я могу присвоить значения в таблице C# переменным?

Большое спасибо.

+0

Почему вы не используете StoredProcedure? – Popeye

+0

Как объявить значения таблицы C# в StoredProcedure? Конечно, SP будет серверным, нет? Или есть эквивалент C#? – William

ответ

1

Я лично использую LINQ, чтобы сделать этот вид процесса, но если вы хотите или должны свернуть свой собственный запрос SQL, как насчет:

SqlCommand sqlCmd = new SqlCommand("UPDATE usr_Table SET description= @description, subject = @subject, text = @text, status = @status WHERE code = @code", connectionString); 
sqlCmd.Parameters.Add(new SqlParameter("description", newDescription)); 
sqlCmd.Parameters.Add(new SqlParameter("subject", newSubject)); 
sqlCmd.Parameters.Add(new SqlParameter("text", newText)); 
sqlCmd.Parameters.Add(new SqlParameter("status", newStatus)); 
sqlCmd.Parameters.Add(new SqlParameter("subject", newSubject)); 
sqlCmd.Parameters.Add(new SqlParameter("code", code)); 

sqlCmd.ExecuteNonQuery(); 

Это будет поставлять все названные параметры в запрос с новыми значениями.

+0

Привет, спасибо за ваш ответ. Я думаю, что я близок, но как мне назначить столбец в моей таблице C# одному из этих SqlParameters? Они динамически считываются из базы данных сервера, и как я могу объявить их? – William

+0

Ах, извините, я вижу, что вы пытаетесь сделать сейчас - я думал, вы пытаетесь обновить отдельные строки. Взгляните на http://www.dotnetperls.com/sqlcommandbuilder - он подробно описывает, как использовать SqlCommandBuilder, который (для цитирования страницы) «помогает обновлять таблицы SQL Server ... устраняет необходимость в написании команд». Вы можете получить DataTable из базы данных, внести необходимые изменения, а затем просто '.Update (Table)', который будет создавать инструкции SQL UPDATE для вас. – KenD

+0

Кроме того, как я уже упоминал, и извинения, если это не подходит для вашего кода, такого рода вещи (IMHO) намного проще с LINQ. Вы можете напрямую читать, изменять и обновлять таблицу базы данных без необходимости писать какой-либо SQL самостоятельно или переносить данные в DataTable. – KenD