SQL2005数据迁移时遇到的问题1:用户组或角色在当前数据库已存在

作者:freethy 发布于:2011-6-21 14:24 Tuesday


 

错误15023:当前数据库中已存在用户或角色
在把远程服务器上的数据库备份还原到本地机后, 给一个"登录"关联一个"用户"时(用户映射),发生错误:
“错误15023:当前数据库中已存在用户或角色” 

把原因及解决办法如下:

在迁移测试平台数据库的过程中发现,在两台服务器上运行的sql server 服务器之间迁移数据库的之后,会出现一个在源服务器上可以正常的用户在目的服务器上无法登录的情况。

首先介绍一下sql server中“登录”与“用户”的区别,“登录”用于用户身份验证,而数据库“用户”帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在“孤立用户”。 此时是不能通过新建登录或者是对同名登录授予对应数据库的“用户”权限来解决登录问题,因为SQL Server会报出“错误15023:当前数据库中已存在用户或角色”,为了解决这个问题,需要调用系统存储过程 sp_change_users_login,具体用法如下:

Use Northwind
go
sp_change_users_login 'update_one', 'fwg', 'fwg'

其中Northwind为存在孤立用户的数据库,update_one是存储过程的参数,表示只处理一个用户,前一个fwg是“用户”,后一个fwg是“登录”,以上这个SQL表示将服务器登录“fwg”与 Northwind 数据库用户“fwg”重新连接起来。这样就可以正常使用数据库了。

 

from:http://hi.baidu.com/goncolin/blog/item/2db5f1d7fc97dd3906088b5b.html

评论(0) 引用(0) 浏览(1282)

ASP.NET中IIS配置.html的映射出现实际HTML文件打不开

作者:freethy 发布于:2011-6-14 14:14 Tuesday

今天在做一个网站的时候。进行URL重写操作。结果出现了两个让人意想不到的事情。。真是头疼

 

第一个到现在还没有结果呢。。也不知道具体是什么原因

配置好映射以后。其他页面都正常重写成功。但有个别重写不了

一个是about.aspx,一个是contact.aspx

实际访问这两个ASPX文件都可以正常显示。

重写成about.html和contact.html就是打不开。。提示该页无法显示

 

网上搜索也没什么结果。后来我把文件名改了一下。改成company.aspx和contactus.aspx

再重写。。就正常了。。难道这两个文件名不能使用。。真是怪?!

 

 

第二个问题。就是重写完成以后。真实存在的HTML文件却打不开了。。

 

不过这个问题。在网上找到了答案。。

今天把它复制下来。。以便以后查看

 

网上搜索出来的 

 

问题描述:
    一套网站程序使用URL重写,配置了ISAPI映射.html  动作全部,检查文件是否存在 不打勾 如下图 

 

  问题:不对IIS配置.html的映射,IIS站点目录下.html页面都能显示。当配置了.html的映射 IIS站点目录下真实存在的.html页面无法显示,错误信息:“页面无法显示”而通过自定义HttpHandlerFactory块过滤的.html文件能够显示,由于这个原因就连FCKEditor也无法正常显示。

这个问题困扰了半天,极度郁闷, 在网上找了好久,也没有个办法,有一个和我一样的问题,但上面说的解决方法却不好用,更是郁闷,后来经过n次的测试修改,才把这个问题解决了,解决方法:
1、首先照旧在网站配置的应用程序扩展名映射中添加扩展名.html映射到aspnet_isapi.dll,是否存在不选;
2、在web.config文件中<compilation>节点下添加code:

<buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
注:仅仅设置应用程序映射是不够的,没有为扩展名“.html”注册的生成提供程序。因此别忘了上面的code!

3、在web.config文件中<system.web>节点下添加code:
<httpHandlers>
      <add path="html/*.html" verb="*" type="AutoModuleService.AutoHandlerFactory,AutoModuleService" validate="true"/>
      <add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
    </httpHandlers>

注:这里值得注意的是add的先后顺序,很简单的原理,通过这个配置文件请求首先要到我们自定义的httpHandler块,如果不在我们指定的path里,则走系统的PageHandlerFactory; 还有一个要注意的地方就是,这里当

<add path="html/*.html" verb="*" type="AutoModuleService.AutoHandlerFactory,AutoModuleService" validate="true"/>
指明路径后,并不像下级目录继承,也就是当用户浏览html/vip/index.html时,并不被我自定义的 AutoModuleService.AutoHandlerFactory处理,而是被系统的 System.Web.UI.PageHandlerFactory正常处理;如果需要继承指明路径下包括下级目录所有*.html的话,则就需要做些修改了

修改方法:

上面的1和2照做;

3、在web.config文件中<system.web>节点下添加code:

<httpHandlers>
      <add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
    </httpHandlers>

4、在web.config文件中<configuration>节点下使用<location>节点,添加code:

  <location path ="html">

    <system.web>
      <httpHandlers>
        <add path="*.html" verb="*" type="AutoModuleService.AutoHandlerFactory,AutoModuleService" validate="true"/>
      </httpHandlers>

    </system.web>

  </location>

 

最后补充两点:
如果你用到的后缀类型是一种古怪的后缀。
比如:*.aaa *.csdn 等这样的后缀,
在IIS6 中,你需要额外再多做一步:
在IIS的站点属性->HTTP头->MIME类型中增加一个该后缀的MIME类型,不然遇到该后缀的请求时将首先被IIS给拦截掉,没办法显示的。

 

from:http://blog.sina.com.cn/s/blog_4831668e0100f6lo.html

评论(0) 引用(0) 浏览(1448)

C#获取当前路径方法

作者:freethy 发布于:2011-6-8 9:15 Wednesday

           //1.获取新的 Process 组件并将其与当前活动的

            //进程关联的主模块的完整路径,包含文件名(进程名)。

           //F:\WinTest\DirectoryTest\DirectoryTest\bin\Debug\DirectoryTest.vshost.exe

           //result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)       

            System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;

          

            //2.获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。

            //F:\WinTest\DirectoryTest\DirectoryTest\bin\Debug

            //result: X:\xxx\xxx (.exe文件所在的目录)

            //此外,System.Environment类提供了CurrentDirectory属性,

            //由于该属性内部调用的就是System.IO.Directory.GetCurrentDirectory(),因此二者是等价的。

            System.Environment.CurrentDirectory;

      

            //3.获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。

            //F:\WinTest\DirectoryTest\DirectoryTest\bin\Debug\

            //result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

            System.AppDomain.CurrentDomain.BaseDirectory;

           

 

            //4.获取和设置包含该应用程序的目录的名称。

            //F:\WinTest\DirectoryTest\DirectoryTest\bin\Debug\

            //result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

            System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

          

            //5.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

            //F:\WinTest\DirectoryTest\DirectoryTest\bin\Debug

            //result: X:\xxx\xxx (.exe文件所在的目录)

            System.Windows.Forms.Application.StartupPath;

           

            //6.获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。

            //F:\WinTest\DirectoryTest\DirectoryTest\bin\Debug\DirectoryTest.EXE

            //result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

            System.Windows.Forms.Application.ExecutablePath;

           

 

            //7.获取应用程序的当前工作目录(不可靠)。

            //F:\WinTest\DirectoryTest\DirectoryTest\bin\Debug

            //result: X:\xxx\xxx (.exe文件所在的目录)

            System.IO.Directory.GetCurrentDirectory();

 

 

from:http://kenchell.blog.163.com/blog/static/2608830920090139353373/

评论(15) 引用(0) 浏览(1804)

数据库死锁问题 及 解决方法

作者:freethy 发布于:2011-6-7 10:15 Tuesday

什么是数据库死锁

     每个使用关系型数据库的程序都可能遇到数据死锁的情况。理解什么是死锁之前先要了解锁定的概念:如果需要“修改”一条数据,首先数据库管理系统会在上面加锁,以保证在同一时间只有一个事务能进行修改操作。锁定(Locking)发生在当一个事务获得对某一资源的“锁”时,这时,其他的事务就不能更改这个资源了,这种机制的存在是为了保证数据一致性。

     多数情况下,可以认为如果一个资源被锁定,它总会在以后某个时间被释放。而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是其他进程所需的,由此造成每个进程都无法继续下去。简单的说,进程A等待进程B释放他的资源,B 又等待A释放他的资源,这样就互相等待就形成死锁。

导致数据库死锁的原因

     一般情况只发生锁超时,就是一个进程需要访问数据库表或者字段的时候,另外一个程序正在执行带锁的访问(比如修改数据),那么这个进程就会等待,当等了很久锁还没有解除的话就会锁超时,报告一个系统错误,拒绝执行相应的SQL操作。

     发生死锁的情况比较少,比如一个进程需要访问两个资源(数据库表或者字段),当获取一个资源的时候进程就对它执行锁定,然后等待下一个资源空闲,这时候如果另外一个进程也需要两个资源,而已经获得并锁定了第二个资源,那么就会死锁,因为当前进程锁定第一个资源等待第二个资源,而另外一个进程锁定了第二个资源等待第一个资源,两个进程都永远得不到满足。

数据库死锁的解决方案

http://kenchell.blog.163.com/blog/static/2608830920100130540924/

评论(0) 引用(0) 浏览(1442)

ACCESS(MSSQL)获取自增长的ID值

作者:freethy 发布于:2011-6-3 10:16 Friday

要获取的ID值字段属性必须设为:自动编号(MSSQL自增长)

取得ID值的三种方式:

/* 对于想要得到一个表中的最后一个插入操作所产生的ID的最好用IDENT_CURRENT('TBName')*/
Insert INTO table(field1,field2,...) VALUES("field1Value","field2Value",...) Select IDENT_CURRENT('recordID') as newIDValue

/*对于马上使用的刚才插入的新记录ID用SCOPE_IDENTITY()是最合适的*/
Insert INTO table(field1,field2,...) VALUES("field1Value","field2Value",...) Select SCOPE_IDENTITY() as newIDValue
备注:假如触发器里有插入新记录,将得到这个语句产生的id


/*对于想要得到一系列的操作中最后得到的那个自增的ID最好用@@IDENTITY*/
Insert INTO table(field1,field2,...) VALUES("field1Value","field2Value",...) Select @@IDENTITY as newIDValue
备注:假如触发器里有插入新记录,将得到触发器里产生的新记录id

评论(87) 引用(0) 浏览(10487)

Powered by emlog 苏ICP备11068260号-3