Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

динамично вмъкване на множество записи при едно щракване върху бутона

Ако не знаете точния брой предмети, за да въведете оценките – как трябва да генерираме заявка, за да го направим?

Все пак, за да ви покажем, че се предпазвате от атаки чрез SQL инжектиране, вие поставяте SQL в съхранените процедури:

create PROCEDURE [dbo].[pr_GetAssignedSubjectsByFacultyIdAndSemester]
@FacultyID int,
@Semester nvarchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT [Faculty], [Subjects],[CreatedBy],[CreatedDate],[ModifiedBy],[ModifiedDate]
 FROM [dbo].[tblNotSure]
WHERE [FacultyID] = @FacultyID
AND [Semester] = @Semester
AND [IsDeleted] = 0
END

След това в кода извикваме съхранената процедура, обърнете внимание на параметризираните команди, това предотвратява атаките с SQL инжектиране. Например да кажем, че въведохме в семестъра ddl/текстово поле (или използвайки FireBug за редактиране на стойността на елементите) 1 UNION SELECT * FROM Master.Users - изпълнението на този ad-hoc SQL може да върне списъка с SQL потребителски акаунти, но премина през параметризирана команда избягва проблема:

public static aClassCollection GetAssignedSubjectsByFacultyIdAndSemester(int facultyId, string semester)
{
var newClassCollection = new aClassCollection();
    using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString))
    {
        using (var command = new SqlCommand("pr_GetAssignedSubjectsByFacultyIdAndSemester", connection))
        {
            try
            {
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@facultyId", facultyId);
                command.Parameters.AddWithValue("@semester", semester);
                connection.Open();
                SqlDataReader dr = command.ExecuteReader();
                while (dr.Read())
                {
                    newClassCollection.Add(new Class(){vals = dr["vals"].ToString()});
                }
            }
            catch (SqlException sqlEx)
            {
             //at the very least log the error
            }
            finally
            {
             //This isn't needed as we're using the USING statement which is deterministic                    finalisation, but I put it here (in this answer) to explain the Using...
                connection.Close();
            }
        }
    }

    return newClassCollection;
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкнете xml данни в таблица в sql сървър 2005

  2. Съветникът за импортиране на данни не харесва избрания от мен тип данни за колона

  3. Как да използвам лимит в Microsoft SQL Server 2008?

  4. Грешка при влизане в SQL Server

  5. Сортиране на куршуми в базата данни