سلام
من برا رفع اين مشكل اين كارو كردم
اول يك پروسيجر پيدا كردم كه كل ديتابيسو به صورت يك پارچه در اورد يعني همه "ي" و "ی" و "ك" و "و" و "پ" و ... رو يارچه كرد
اين كد پروسيجر كه پيداش كردم
Create procedure [dbo].[ChangeCodePage]
as
select ROW_NUMBER() over (order by TBLs.TABLE_NAME, COLs.COLUMN_NAME) Row, TBLs.TABLE_NAME TblName, COLs.COLUMN_NAME ColName
into #t
from INFORMATION_SCHEMA.TABLES TBLs
join INFORMATION_SCHEMA.COLUMNS COLs on TBLs.TABLE_NAME = COLs.TABLE_NAME
where TABLE_TYPE = 'BASE TABLE'
and DATA_TYPE in ('char', 'nchar', 'varchar', 'nvarchar')
declare @x varchar(1000)
create table #errors(Error varchar(1000))
declare @i int
set @i = 0
while 1 = 1
begin
set @i = (select top 1 Row from #t where Row > @i)
if @i is null
break
select @x = 'update [' + TblName + '] set [' + ColName + '] = Replace( Replace( Replace([' + ColName + '], nchar(1603), nchar(1705)), nchar(1610), nchar(1740)), nchar(1609), nchar(1740))'
from #t
where Row = @i
begin try
exec(@x)
end try
begin catch
insert into #errors
values(char(13) + char(10) + 'ERROR: ' + char(13) + char(10) + @x + char(13) + char(10))
end catch
end
select *
from #errors
print 'CODE PAGE GHANGING DONE!'
drop table #t
drop table #errors
طرز استفاده از اين كد هم راحته
اول تو sql اجراش كنين تا پروسيجر ساخته بشه بعد پروسيجر رو اجرا كنين
exec ChangeCodePage
بعد تو برنامه خودم هر دستوري رو ميخوام به sql پاس بدم رو با يك تابع حروف "ي" و "ك" و "و" و ... رو به صورت يكپارچه مثل ديتابيس در مياره بعد ميفرسته تو ديتابيس
اينم تابع تو C# من
public string ChengCode(string str)
{
return str.Replace((char)1603, (char)1705).Replace((char)1610, (char)1740).Replace((char)1609, (char)1740);
}
مثلا اگه بخواين دستورات داخل متقيير sqlcmd رو اجرا كنين قبل از اجرا بايد اين كارو بكنين
sqlcmd = ChengCode(sqlcmd);
ديگه هيچ مشكلي با انواع مختلف صفحه كليد ندارم و نرم افزار اضافي هم نميخواد نصب كنم