 |
|
เกี่ยวกับเรื่อง SQL Server 2000 และ Stored procedure ตัวแปรหน้าใช้อักษรพิเศษ |
|
 |
|
|
 |
 |
|
น่าจะเช็คตั้งแต่ขั้นตอนการส่งข้อมูลน่ะครับ หรือไม่ถ้า .NET ก็ใช้การส่ง Query แบบ Parameters จะได้ไม่มีปัญหาครับ
.NET Parameterized Queries
|
 |
 |
 |
 |
Date :
2013-01-07 17:18:10 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมยัง งง กับการใช้งานมันอยู่ครับ ช่วยยกตัวอย่างได้ป่าว
ผมมือใหม่ พอเขียนเข้าใจแต่ job ที่รันใน sql แต่หากเป็น Stroe Procedure ที่เขียนเชื่อมต่อกับโปรแกรมยังไม่เก่งเท่าไร
ผมต้องเขียนสคลิปเพิ่มต่อไหนเพิ่มที่จะบล็อคไม่ให้ใช้อักษรพิเศษ !@#$%^&*()_ ให้มันตรวจเช็คค่าก่อนลงบันทึกใน SQL
Code
CREATE Procedure [dbo].[WZ_CreateCharacter]
@AccountID varchar(10),
@Name varchar(10),
@Class tinyint
AS
Begin
SET NOCOUNT ON
SET XACT_ABORT ON
DECLARE @Result tinyint
SET @Result = 0x00
If EXISTS ( SELECT Name FROM Character WHERE Name = @Name )
begin
SET @Result = 0x01
GOTO ProcEnd
end
If EXISTS ( SELECT Name FROM BotPet WHERE Name = @Name )
begin
SET @Result = 0x01
GOTO ProcEnd
end
BEGIN TRAN
If NOT EXISTS ( SELECT Id FROM AccountCharacter WHERE Id = @AccountID )
begin
INSERT INTO dbo.AccountCharacter(Id, GameID1, GameID2, GameID3, GameID4, GameID5, GameIDC)
VALUES(@AccountID, @Name, NULL, NULL, NULL, NULL, NULL)
SET @Result = @@Error
end
else
begin
Declare @g1 varchar(10), @g2 varchar(10), @g3 varchar(10), @g4 varchar(10), @g5 varchar(10)
SELECT @g1=GameID1, @g2=GameID2, @g3=GameID3, @g4=GameID4, @g5=GameID5 FROM dbo.AccountCharacter Where Id = @AccountID
if( ( @g1 Is NULL) OR (Len(@g1) = 0))
begin
UPDATE AccountCharacter SET GameID1 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
end
else if( @g2 Is NULL OR Len(@g2) = 0)
begin
UPDATE AccountCharacter SET GameID2 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
end
else if( @g3 Is NULL OR Len(@g3) = 0)
begin
UPDATE AccountCharacter SET GameID3 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
end
else if( @g4 Is NULL OR Len(@g4) = 0)
begin
UPDATE AccountCharacter SET GameID4 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
end
else if( @g5 Is NULL OR Len(@g5) = 0)
begin
UPDATE AccountCharacter SET GameID5 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
end
else
begin
SET @Result = 0x03
GOTO TranProcEnd
end
end
if( @Result <> 0 )
begin
GOTO TranProcEnd
end
else
begin
INSERT INTO dbo.Character(AccountID, Name, cLevel, LevelUpPoint, Class, Strength, Dexterity, Vitality, Energy, Inventory,MagicList,
Life, MaxLife, Mana, MaxMana, MapNumber, MapPosX, MapPosY, MDate, LDate, Quest, DbVersion, Leadership,money )
SELECT @AccountID As AccountID, @Name As Name, Level, 0, @Class As Class,
Strength, Dexterity, Vitality, Energy, Inventory,MagicList, Life, MaxLife, Mana, MaxMana, MapNumber, MapPosX, MapPosY,
getdate() As MDate, getdate() As LDate, Quest, DbVersion, Leadership,0
FROM DefaultClassType WHERE Class = @Class
SET @Result = @@Error
end
TranProcEnd: -- GOTO
IF ( @Result <> 0 )
ROLLBACK TRAN
ELSE
COMMIT TRAN
ProcEnd:
SET NOCOUNT OFF
SET XACT_ABORT OFF
SELECT
CASE @Result
WHEN 0x00 THEN 0x01
WHEN 0x01 THEN 0x00
WHEN 0x03 THEN 0x03
ELSE 0x02
END AS Result
End
GO
|
 |
 |
 |
 |
Date :
2013-01-13 01:53:08 |
By :
มือใหม่ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใครเก่งช่วยหน่อยครับ จะได้เป็นความรู้ในการศึกษาต่อไป
ขอบคุณมากครับ
|
 |
 |
 |
 |
Date :
2013-01-15 01:44:49 |
By :
มือใหม่ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำสองขั้นตอนก็ได้ครับ จะง่ายกว่า
1. เช็คค่าชื่อตัวละครที่ตั้งนั้นมีตัวที่เราห้ามมั้ย !@#$%^&*()_ , ก็ใช้ script พวกเช็คตัวอักษรใน string ตามภาษาที่ใช้เขียนแหละครับ ถ้าเช็คแล้วไม่มีอักษรที่ห้าม เราก็ทำ(2)
2. โยนค่าต่าง ๆ ที่กรอกเข้าไปใน stored procedure ที่ทำไว้ครับ
ใช้ภาษาอะไรเขียนโค้ดอยู่ครับ เผื่อมีใครช่วยเพิ่ม
|
 |
 |
 |
 |
Date :
2013-01-15 15:20:53 |
By :
N3BUL4 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมไม่ค่อยแน่ใจเหมือนกันนะครับ ที่ใช้ใน SQL2000 ตรงส่วนของ stored procedure แต่คิดว่าน่าจะเป็น c++
ผมพอถูๆไถๆ ไปได้ เรื่องการเขียน JOB ใน SQL2000 ที่ให้มันรัยเป็นนาที
แต่จากโค๊ตข้างบนนี้ผมอ่านแล้วไม่เข้าใจเลยว่ามันคืออะไร แต่พอเข้าใจแค่ UPDATE SET WHERE
รบกวนหน่อยนะครับ ขอบคุณมากๆเลยครับ
|
 |
 |
 |
 |
Date :
2013-01-15 23:48:35 |
By :
มือใหม่ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Stored Procedure ที่ให้มา ดูคร่าว ๆ เป็นการจัดการตัวละครของเกม หรือสร้างตัวละคร
รับค่า AccountID, Name, Class เข้ามาสร้างข้อมูลตัวละครใหม่ ประมาณนั้นครับ
แต่ส่วน C++ ผมไม่ทราบเหมือนกันว่าใช้ร่วมกับ stored procedure แล้ว Code จะเป็นยังไง (พอดีไม่เคยทำ C++ เลย รู้แค่เค้าชอบใช้เขียนเกมกันเมื่อหลายปีก่อน)
|
 |
 |
 |
 |
Date :
2013-01-16 09:41:25 |
By :
N3BUL4 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ยังไงก็ขอบคุณมากเลยครับที่มาช่วยแนะนำความรู้ให้ ^^
แต่ผมก็ยังไม่เข้าใจอยู่ดีๆ รอผู้รอบรู้คนต่อไป รบกวนขอคำชี้นำหน่อยนะครับ ^^
|
 |
 |
 |
 |
Date :
2013-01-16 16:43:08 |
By :
มือใหม่ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำไม่คุณไม่เช็ค อักษรพิเศษ ก่อนละครับ ว่าข้อมูลที่เข้ามานั้น ถูกหรือไม่
ถ้าไม่ถูกก็ให้ return เป็นข้อความหรืออะไรก็แล้วแต่คุณ
แต่ถ้าข้อมุลถูกต้องก็ให้ไปเรียก procedure ตัวที่ต้องการ
ผมไม่แนะนำให้ check อักษรพิเศษใน procedure ครับ เพราะคุณจะเพิ่มภาระให้ server มากเกินไป
เพราะทุกครั้งที่คุณทำการเรียก procedure ตัวนั้นๆ จะทำให้ memory ถูกใช้งาน
|
 |
 |
 |
 |
Date :
2013-01-16 17:02:44 |
By :
kanchen |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอขอบคุณมากครับ kanchen
แต่การเช็คภาษาทางฝั่งโปรแกรมมันป้องกันได้เฉพาะในการสร้างตัวละคร แต่มันจะมี คำสั่งอีกหลายๆคำสั่งในเกมส์ซิจะมีผลเหมือนกัน
ผมเลยอยากได้ตัวอย่างแค่จาก stored procedure เดียวไว้เป็นตัวอย่าง ส่วนอันอื่นๆผมจะไปดัดแปลงใช้ตามทีหลังครับ
|
 |
 |
 |
 |
Date :
2013-01-16 19:23:56 |
By :
มือใหม่ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@ KanJi
มันเป็นศัพท์เฉพาะทางนั้นเลย 555+ ดูแล้ว งง
|
 |
 |
 |
 |
Date :
2013-01-16 21:28:07 |
By :
มือใหม่ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|