PDA

View Full Version : نیاز فوری کمک کنیدمشل insert & update



radan63
دوشنبه 18 اردیبهشت 1385, 17:13 عصر
من وقتی از دستورات insert,updateاستفاده می کنم (این دستورات داخل stored procrdureهستند)هنگام ورودداده یا ویرایش اگر از نقطه یا اینتر یا سمیکالن یا کاما استفاده نمایم عمل ورود داده ها به بانک با مشکل روبرو می شود وپیغام خطا می دهد
به طور مثال در هنگام وارد نمودن (.)این پیغام را می دهد:
'.'incorrect syntax
ولی وقتی بدون علامت متنی را وارد نمایم مشکل پیش نمی آید خواهشا کمک کنید تا مشکل حل شود

alinux_redhat
دوشنبه 18 اردیبهشت 1385, 19:03 عصر
بهترین کار برای این مشکل استفاده از پارامترهست
sp رو پارامتری نوشتی دیگه؟

AminSobati
دوشنبه 18 اردیبهشت 1385, 22:05 عصر
من هم شک دارم که همه چیز از طریق پارامتر ارسال بشه! چون به نوعی ظاهرا محتوی مطلب که قراره Insert بشه، داره تفسیر هم میشه. اگر متن SP رو پست کنین کمک بزرگی میکنه

radan63
سه شنبه 19 اردیبهشت 1385, 12:15 عصر
بهترین کار برای این مشکل استفاده از پارامترهست
sp رو پارامتری نوشتی دیگه؟
بله من کدی که داخل stored procedureبه کار بردم به این صورت است برای insert منظورم است
stored procedure insert_data

@)p1 nvarchar(100),@p2 nvarchar(500)

as
insert into news (titel,main) values (@p1,@p2

)
و در محیط visual studio یک صفحه ی ascxدارم که مقادیر را در دوtextboxقرار می دهد
و بدین صورت با بانک ارتباط بر قرار می شود.
این کد داخل button _click قرار داده شده یعنی وقتی کاربر روی دکمه ی ارسال کلیک کرد این عملیات انجام می شود
ولی هروقت در textbox ها علامتی قرار گیرد (.و'و"و...)و حتی اینتر خطا می دهد
dim cmd as sqlcommand
dim str_sql as string
str_sql="execute insert_data "+t1.text+","+t2.text
cmd=new sqlcommand(str_sql,con)
con متغیر connection من برای ایجاد ارتباط است
cmd.executenonquery
پس اگر همه چیز از طریق پارامتر نتونه ارسال بشه پس من چه کار کنم تا مشکلم حل شه.

Kamyar.Kimiyabeigi
سه شنبه 19 اردیبهشت 1385, 12:36 عصر
USE tempdb
GO

CREATE TABLE t1
(c1 NVARCHAR(10))
GO

CREATE PROCEDURE [insert]
@p NVARCHAR(10)
AS
INSERT INTO t1 (c1) VALUES (@p)
GO

EXECUTE [insert] '"'
SELECT * FROM t1

EXECUTE [insert] '.'
SELECT * FROM t1

EXECUTE [insert] ''''
SELECT * FROM t1

radan63
چهارشنبه 20 اردیبهشت 1385, 10:21 صبح
USE tempdb
GO

CREATE TABLE t1
(c1 NVARCHAR(10))
GO

CREATE PROCEDURE [insert]
@p NVARCHAR(10)
AS
INSERT INTO t1 (c1) VALUES (@p)
GO

EXECUTE [insert] '"'
SELECT * FROM t1

EXECUTE [insert] '.'
SELECT * FROM t1

EXECUTE [insert] ''''
SELECT * FROM t1

مشکل اینتر را چه کار کنم چون اینتر که می زنم خطا نمی گیرد فقط به جای اینتر یک فاصله ی خالی می اندازد.

Kamyar.Kimiyabeigi
چهارشنبه 20 اردیبهشت 1385, 10:28 صبح
من فقط خواستم نشون بدم Insert ایی که مد نظر شماست قابل انجامه فقط زمانی که از داخل برنامه میخواین مقادیر را پاس کنین مراقب کوتیشنها ('') باشید. (کدی که براتون نوشتم فقط یک Sample بود)
نکته : چهارتا کوتیشن در Appliocation به معنی تک کوتیشن ( ' ) هست

Omid Rekabsaz
چهارشنبه 20 اردیبهشت 1385, 17:48 عصر
مشکل شما در Application است... قبل از اجرای sp در کد cotation هار درست نمایید...از دستور replcae می توانید استفاده نمایید...

AminSobati
پنج شنبه 21 اردیبهشت 1385, 00:06 صبح
ظاهرا مشکل در نوع استفاده از Command هستش. وقتی SP دارید، نباید دستور EXEC رو بهش بدین:



Dim cnn As New SqlClient.SqlConnection("What ever...")
cnn.Open()
Dim cmd As New SqlClient.SqlCommand
cmd.Connection = cnn
cmd.CommandText = "insert_data"
cmd.CommandType = CommandType.StoredProcedure

Dim p1 As New SqlClient.SqlParameter
p1.ParameterName = "@P1"
p1.SqlDbType = SqlDbType.NVarChar
p1.Size = 1000
p1.Value = "Any string 1 ..."

Dim p2 As New SqlClient.SqlParameter
p1.ParameterName = "@P2"
p1.SqlDbType = SqlDbType.NVarChar
p1.Size = 1000
p1.Value = "Any string 2 ..."

cmd.Parameters.Add(p1)
cmd.Parameters.Add(p2)

cmd.ExecuteScalar()