[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.당신은 그래서 가장 좋은 방법은 매개 변수를 사용하는 것입니다, 여기에 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.
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.
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.솔직히, 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.당신은 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
from https://stackoverflow.com/questions/11905185/executing-query-with-parameters by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 시간대 저장 데이터 유형에서 "시간대와 타임 스탬프" (0) | 2020.04.27 |
---|---|
[SQL] 간격 TO_CHAR 포맷 (0) | 2020.04.27 |
[SQL] 왜 ISNUMERIC ( '는.') 1을 반환합니까? (0) | 2020.04.27 |
[SQL] SQL에서는 여러 가능한 메뉴 선택을 통해 선택하는 성명을 준비? (0) | 2020.04.27 |
[SQL] 어떻게 클래식 ASP에서 매개 변수화 된 SQL 쿼리를 만드는 방법? (0) | 2020.04.27 |