복붙노트

[SQL] 매개 변수 쿼리를 실행

SQL

매개 변수 쿼리를 실행

전 C #에서 .SQL 스크립트를 실행합니다. 기본적으로 스크립트는 몇 가지 다른 테이블에 행을 삽입합니다.

요점은 내가 .SQL 쿼리에 전달해야한다는 것을 나는 C # 코드의 값을 가지고있다. 이 값은 프로그램 실행 중에 수집됩니다.

저는 여기에 C # 코드에서 실행하려는 쿼리는 다음과 같습니다

INSERT INTO [DB].[dbo].[User]
           ([Id]
           ,[AccountId]
           ,[FirstName]
           ,[LastName]
           ,[JobTitle]
           ,[PhoneNumber]
          )
     VALUES
           ('00A640BD-1A0D-499D-9155-BA2B626D7B68'
           ,'DCBA241B-2B06-48D7-9AC1-6E277FBB1C2A'
           ,'Mark'
           ,'Wahlberg'
           ,'Actor'
           ,'9889898989'])
GO

값이 수시로 즉 달라질 것이며, 이들은 C # 코드 및 필요 캡처 통과한다.

사람이 도움을 기쁘게 할 수 나를 this..I는 C # 및 SQL 모두를 배우고 않습니다. 고마워요.

해결법

  1. ==============================

    1.당신은 그래서 가장 좋은 방법은 매개 변수를 사용하는 것입니다, 여기에 SQL 주입 공격에 자신을 열 수 :

    당신은 그래서 가장 좋은 방법은 매개 변수를 사용하는 것입니다, 여기에 SQL 주입 공격에 자신을 열 수 :

    using (SqlConnection dbConn = new SqlConnection(connectionString))
    {
        dbConn.Open();
    
        using (SqlTransaction dbTrans = dbConn.BeginTransaction())
        {
            try
            {
                using (SqlCommand dbCommand = new SqlCommand("insert into [DB].[dbo].[User] ( [Id], [AccountId], [FirstName], [LastName], [JobTitle], [PhoneNumber] ) values ( @id, @accountid, @firstname, @lastname, @jobtitle, @phonenumber );", dbConn))
                {
                    dbCommand.Transaction = dbTrans;
    
                    dbCommand.Parameters.Add("id", SqlType.VarChar).Value = id;
                    dbCommand.Parameters.Add("accountid", SqlType.VarChar).Value = accountId;
                    dbCommand.Parameters.Add("firstname", SqlType.VarChar).Value = firstName;
                    dbCommand.Parameters.Add("lastname", SqlType.VarChar).Value = lastName;
                    dbCommand.Parameters.Add("jobtitle", SqlType.VarChar).Value = jobTitle;
                    dbCommand.Parameters.Add("phonenumber", SqlType.VarChar).Value = phoneNumber;
    
                    dbCommand.ExecuteNonQuery();
                }
    
                dbTrans.Commit();
            }
            catch (SqlException)
            {
                dbTrans.Rollback();
    
                throw; // bubble up the exception and preserve the stack trace
            }
        }
    
        dbConn.Close();
    }
    

    이것은 ADO.Net과 초보자를위한 좋은 기사입니다

    편집 - 그냥 추가 정보의 비트, 나는이 SQL 명령이 롤백됩니다 실패 때문에 경우에 트랜잭션을 추가했습니다.

  2. ==============================

    2.

        using SqlCommand cmd= conn.CreateCommand())
        {
                            cmd.CommandText = @"INSERT INTO TABLE (COLUMNS) VALUES (@Id, @account etc...
    
    
                            cmdUser.Parameters.Add(new SqlParameter("@User", SqlDbType.UniqueIdentifier) { Value = UserTypeID });
                            cmdUser.Parameters.Add(new SqlParameter("@Id", SqlDbType.UniqueIdentifier) { Value = ApprovalTypeID });
                            cmdUser.Parameters.Add(new SqlParameter("@AccountId", SqlDbType.UniqueIdentifier) { Value = UserID });
                            cmdUser.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 100) { Value = Name });
                            cmdUser.Parameters.Add(new SqlParameter("@JobTitle", SqlDbType.NVarChar, 100) { Value = Surname });
                            cmdUser.Parameters.Add(new SqlParameter("@PhoneNumber", SqlDbType.Bit) { Value = Active });
        cmdUser.ExecuteNonQuery();
    }
    
  3. ==============================

    3.

            try
            {
                using (SqlConnection cn = new SqlConnection(this.ConnectionString))
                {
                    SqlCommand cmd = new SqlCommand("Insert_User", cn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    if (cn.State != ConnectionState.Open)
                        cn.Open();
                    cmd.Parameters.Add("Id", SqlDbType.NVarChar).Value = "00A640BD-1A0D-499D-9155-BA2B626D7B68";
                    cmd.Parameters.Add("AccountId", SqlDbType.NVarChar).Value = "DCBA241B-2B06-48D7-9AC1-6E277FBB1C2A";
                    cmd.Parameters.Add("FirstName", SqlDbType.NVarChar).Value = "Mark";
                    cmd.Parameters.Add("LastName", SqlDbType.NVarChar).Value = "Wahlberg";
                    cmd.Parameters.Add("JobTitle", SqlDbType.NVarChar).Value = "Actor";
                    cmd.Parameters.Add("PhoneNumber", SqlDbType.NVarChar).Value = "9889898989";
    
                    return cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
    

    및 저장 프로 시저, SQL에서 :

        create procedure [Insert_User]
    (
    @id as nvarchar(100),
    @accid as nvarchar(100),
    @fname as nvarchar(100),
    @lname as nvarchar(100),
    @jobtitle as nvarchar(100),
    @phone as nvarchar(100)
    )
        INSERT INTO [DB].[dbo].[User]
                   ([Id]
                   ,[AccountId]
                   ,[FirstName]
                   ,[LastName]
                   ,[JobTitle]
                   ,[PhoneNumber]
                  )
             VALUES
                   (@id
                   ,@accid
                   ,@fname
                   ,@lname
                   ,@jobtitle
                   ,@phone])
    

    또한, 당신은 설정 값에 텍스트 상자 또는 다른 입력 유형 컨트롤을 사용할 수 있습니다. 당신이 원하는대로 하나의 값 이상이 예를 들어 identifire로 설정되어있는 경우 당신은 등 고유 식별자, INT로, 데이터 유형을 변경할 수 있습니다. 계정 ID는 쿼리에서 제거합니다.

  4. ==============================

    4.솔직히, ADO.NET이 제대로이 같은 일을 열심히한다. 단정 한 같은 도구를 쉽게 있는지 확인하기 위해 존재한다 :

    솔직히, ADO.NET이 제대로이 같은 일을 열심히한다. 단정 한 같은 도구를 쉽게 있는지 확인하기 위해 존재한다 :

    dbConn.Execute(
         @"insert into [DB].[dbo].[User] ( [Id], [AccountId], [FirstName], [LastName],
                                           [JobTitle], [PhoneNumber] )
           values ( @id, @accountId, @firstName, @lastName, @jobTitle, @phoneNumber )",
           new { id, accountId, firstName, lastName, jobTitle, phoneNumber });
    

    이것은 당신을 위해 모든 파라미터와, 효율적으로, 효과적으로, 그리고 안전하게 거래 할 것이다.

    쿼리를 실행하고 개체를 채우는 유사한 API는있다.

  5. ==============================

    5.당신은 System.Data.SqlCommand 클래스가 필요합니다.

    당신은 System.Data.SqlCommand 클래스가 필요합니다.

    명명 된 매개 변수에 고정 값을 변경합니다. 예를 들면 :

    INSERT INTO (값 @) TABLE (열 1)의 값이 값 1 // @ 명명 파라미터

    예:

    var connection = new SqlConnection("connectionstring");
    var command = connection.CreateCommand();
    command.CommandText = "insert...."; // sql command with named parameters
    
    // set the named parameter values
    command.Parameters["@Value1"] = "Mark wa...";
    
    // execute 
    command.ExecuteNonQuery();
    

    SqlCommand를 참조 : http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.aspx

  6. from https://stackoverflow.com/questions/11905185/executing-query-with-parameters by cc-by-sa and MIT license