ورود

View Full Version : سوال: حل اشکال Nvarchar در SP



khorsandreza
جمعه 07 آبان 1389, 23:37 عصر
سلام
من در دیتابیس یک sp دارم و یک فیلد ان از نوع nvarchar است موقع ذخیره اطلاعات علامت سوال قرار میگیره برای فیلدهای از نوع nvarchar یک علامت N قرار میدهند ولی من هر جور تغییر میدم علامت سوال حل نمیشود و N خودش در بانک ذخیره میشد
شکل دستور ارسال مقدار از C#


protected void SaveKey_Click(object sender, EventArgs e)
{
int PKID = (int)Session["NewRec"];
string ConnectionString = mvfConnectionString.ConnectionString;
SqlConnection con = new SqlConnection(ConnectionString);
string Command_Text = "";
Command_Text = "EXECUTE SavePanelInfo @PK_ID,@PaneStr,@Side,@ModuleName,@Show";
SqlCommand cmd = new SqlCommand(Command_Text, con);
SqlParameter param = new SqlParameter("@PK_ID", PKID.ToString());
cmd.Parameters.Add(param);
param = new SqlParameter("@PaneStr",'N'+TextBox1.Text);
cmd.Parameters.Add(param);
param = new SqlParameter("@Side", DropDownList1.SelectedValue);
cmd.Parameters.Add(param);
param = new SqlParameter("@ModuleName", DropDownList2.SelectedValue);
cmd.Parameters.Add(param);
param = new SqlParameter("@Show", RadioButtonList1.SelectedValue);
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}


شکل دستور SP


CREATE PROCEDURE SavePanelInfo
@PK_ID int,
@PaneStr varchar(30) ,
@Side varchar(1) ,
@ModuleName varchar(15) ,
@Show varchar(1)
AS
BEGIN
if @PK_ID= 0
begin
INSERT INTO paneltb(PaneStr,Side,ModuleName,Show)
VALUES(@PaneStr,@Side,@ModuleName,@Show)
end else
begin
update paneltb set
PaneStr = 'N'+@PaneStr,
Side = @Side,
ModuleName =@ModuleName,
Show =@Show
Where PK_ID =@PK_ID
end
END

md_bluelily
جمعه 07 آبان 1389, 23:58 عصر
اشتباهتون در اینجاست که N رو مستقیما دارید به مقدار مورد نظرتون اضافه می کنید.!!!!!!!!!
به جای:

"N"+TextBox1.Text

از این یکی استفاده کنید:

"N'"+TextBox1.Text + "'"

موفق باشید.

khorsandreza
شنبه 08 آبان 1389, 00:12 صبح
اشتباهتون در اینجاست که N رو مستقیما دارید به مقدار مورد نظرتون اضافه می کنید.!!!!!!!!!
به جای:

"N"+TextBox1.Text

از این یکی استفاده کنید:

"N'"+TextBox1.Text + "'"

موفق باشید.
مشکل حل نشد تصویر را ببینید:
http://www.irupload.ir/images/7yyc3gjtwdidrr8jgm76.jpg

بهزادصادقی
شنبه 08 آبان 1389, 01:05 صبح
ببین این کمکت می کنه یا نه. متاسفانه من خودم نمی تونم تستش کنم:



protected void SaveKey_Click(object sender, EventArgs e)
{
int PKID = (int)Session["NewRec"];
string ConnectionString = mvfConnectionString.ConnectionString;
SqlConnection con = new SqlConnection(ConnectionString);
string Command_Text = "";
Command_Text = "EXECUTE SavePanelInfo @PK_ID,@PaneStr,@Side,@ModuleName,@Show";
SqlCommand cmd = new SqlCommand(Command_Text, con);
SqlParameter param = new SqlParameter("@PK_ID", PKID.ToString());
cmd.Parameters.Add(param);
param = new SqlParameter("@PaneStr",TextBox1.Text);
cmd.Parameters.Add(param);
param = new SqlParameter("@Side", DropDownList1.SelectedValue);
cmd.Parameters.Add(param);
param = new SqlParameter("@ModuleName", DropDownList2.SelectedValue);
cmd.Parameters.Add(param);
param = new SqlParameter("@Show", RadioButtonList1.SelectedValue);
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}



CREATE PROCEDURE SavePanelInfo
@PK_ID int,
@PaneStr nvarchar(30) ,
@Side nvarchar(1) ,
@ModuleName nvarchar(15) ,
@Show nvarchar(1)
AS
BEGIN
if @PK_ID= 0
begin
INSERT INTO paneltb(PaneStr,Side,ModuleName,Show)
VALUES(@PaneStr,@Side,@ModuleName,@Show)
end else
begin
update paneltb set
PaneStr = @PaneStr,
Side = @Side,
ModuleName =@ModuleName,
Show =@Show
Where PK_ID =@PK_ID
end
END

khorsandreza
شنبه 08 آبان 1389, 01:30 صبح
ببین این کمکت می کنه یا نه. متاسفانه من خودم نمی تونم تستش کنم:



protected void SaveKey_Click(object sender, EventArgs e)
{
int PKID = (int)Session["NewRec"];
string ConnectionString = mvfConnectionString.ConnectionString;
SqlConnection con = new SqlConnection(ConnectionString);
string Command_Text = "";
Command_Text = "EXECUTE SavePanelInfo @PK_ID,@PaneStr,@Side,@ModuleName,@Show";
SqlCommand cmd = new SqlCommand(Command_Text, con);
SqlParameter param = new SqlParameter("@PK_ID", PKID.ToString());
cmd.Parameters.Add(param);
param = new SqlParameter("@PaneStr",TextBox1.Text);
cmd.Parameters.Add(param);
param = new SqlParameter("@Side", DropDownList1.SelectedValue);
cmd.Parameters.Add(param);
param = new SqlParameter("@ModuleName", DropDownList2.SelectedValue);
cmd.Parameters.Add(param);
param = new SqlParameter("@Show", RadioButtonList1.SelectedValue);
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}



CREATE PROCEDURE SavePanelInfo
@PK_ID int,
@PaneStr nvarchar(30) ,
@Side nvarchar(1) ,
@ModuleName nvarchar(15) ,
@Show nvarchar(1)
AS
BEGIN
if @PK_ID= 0
begin
INSERT INTO paneltb(PaneStr,Side,ModuleName,Show)
VALUES(@PaneStr,@Side,@ModuleName,@Show)
end else
begin
update paneltb set
PaneStr = @PaneStr,
Side = @Side,
ModuleName =@ModuleName,
Show =@Show
Where PK_ID =@PK_ID
end
END
اینجوری باشه که علامت سوال ذخیره میشه
من مقدار های N عمدا قرار دادم تا دوستان اشکال را برطرف کنند مشکل در نحوه فرار محل گرفتن میباشد

بهزادصادقی
شنبه 08 آبان 1389, 03:12 صبح
اینجوری باشه که علامت سوال ذخیره میشه
من مقدار های N عمدا قرار دادم تا دوستان اشکال را برطرف کنند مشکل در نحوه فرار محل گرفتن میباشد

شما این رو واقعا امتحان کردی یا فقط با خواندن کد به این نتیجه رسیده ای؟

اگر هنوز امتحانش نکرده ای، لطفا امتحانش کن و بعد بی زحمت بگو جواب می ده یا نه.

مرسی.

dodossaramasoud
شنبه 08 آبان 1389, 06:35 صبح
شما بايد بجاي استفاده ازواحد متغيير PaneStr varchar از (50)NVARCHAR استفاده نمائيد و درون TABLE بايد فيلدي كه كلمات فارسي در آن قرار مي گيرد از نوع (50)NVARCHAR باشد

khorsandreza
شنبه 08 آبان 1389, 11:41 صبح
اصلا متوجه اشتباه فاحش خودم نشده در جدول nvarchar قرار دادم ولی در sp اشتباها varchar وقتی شما گفتید متوجه ممنون